Reputation: 53
I had a problem with passing the value to my class:
public class FragmentViewPager extends Fragment {
public static int p;
private FragmentPagerItemAdapter adapter;
private static final String TAG = "log";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_view_pager, container, false);
adapter = new FragmentPagerItemAdapter(
getChildFragmentManager(), FragmentPagerItems.with(getActivity())
.add("1", AnimalsFragment.class)
.add("2", AnimalsFragment.class)
.add("3", AnimalsFragment.class)
.add("4", AnimalsFragment.class)
.add("5", AnimalsFragment.class)
.create());
ViewPager viewPager = (ViewPager) view.findViewById(R.id.viewpager);
viewPager.setAdapter(adapter);
SmartTabLayout viewPagerTab = (SmartTabLayout) view.findViewById(R.id.viewpagertab);
viewPagerTab.setViewPager(viewPager);
// определяем позицию фрагмента
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
@Override
public void onPageSelected(int position) {
p = position;
}
@Override
public void onPageScrollStateChanged(int state) {}
});
return view;
}
}
I get the value:
public class AnimalsFragment extends Fragment implements View.OnClickListener {
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_animals, container, false);
// получаем позицию фрагмента
position = FragmentViewPager.p;
Log.i(TAG, "position = " + position);
...
Logs:
I/log: position = 1
I/log: position = 2
I/log: position = 3
There are 5 fragments, the first '0' and last '4' are not displayed. But if you place logs in the method onPageSelected() logs are displayed correctly. How to correctly convey the values of paging in a class?
Upvotes: 1
Views: 96
Reputation: 11921
ViewPager
creates current, previous and next fragments which you can set and change the number with ViewPager's setOffscreenPageLimit
method. (The default is 1. You cannot set it to 0.)
So when you put your Log code in onCreateView
, 3 of your Fragments
will be created and you'll see the log three times and your p variable will be last created fragment's position since your default screen limit is 1.
And when you put your Log code in onPageSelected
your log only'll work when you swipe the ViewPager
.
Here you can check for more detail: https://developer.android.com/reference/android/support/v4/view/ViewPager.html
Upvotes: 1