Java 传递值分页器片段

Java 传递值分页器片段,java,android,Java,Android,我在将值传递给我的类时遇到问题: public class FragmentViewPager extends Fragment { public static int p; private FragmentPagerItemAdapter adapter; private static final String TAG = "log"; @Override public View onCreateView(LayoutInflater inflate

我在将值传递给我的类时遇到问题:

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;
    }
}
我得到的值是:

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);
...
日志:

共有5个片段,不显示第一个“0”和最后一个“4”。
但如果将日志放在方法onPageSelected()中,则会正确显示日志。
如何在类中正确传递分页的值?

ViewPager
创建当前、上一个和下一个片段,您可以使用ViewPager的
setoffscreenpagilemit
方法设置和更改这些片段的编号。(默认值为1。不能将其设置为0。)

因此,当您将日志代码放入
onCreateView
时,将创建3个
片段
,您将看到三次日志,并且p变量将是最后创建的片段位置,因为默认屏幕限制为1

当您将日志代码放入
onPageSelected
时,您的日志仅在您滑动
ViewPager
时才起作用

您可以在此处查看更多详细信息:

请发布您的代码,包括PageRadaperAdded full code,但如果您将日志放在方法onPageSelected()中,则会正确显示日志。
I/log: position = 1
I/log: position = 2
I/log: position = 3