传递值Pager片段

时间:2017-04-11 08:33:26

标签: 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 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);
...

日志:

I/log: position = 1
I/log: position = 2
I/log: position = 3

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

1 个答案:

答案 0 :(得分:1)

ViewPager创建您可以设置的当前,上一个和下一个片段,并使用ViewPager的setOffscreenPageLimit方法更改数字。 (默认值为1.您不能将其设置为0.。

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

当您将日志代码放在onPageSelected时,只有您的日志会在您ViewPager时滑动。

您可以在这里查看更多详细信息: https://developer.android.com/reference/android/support/v4/view/ViewPager.html