java - 传递值 Pager Fragment

标签 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个 fragment ,第一个'0'和最后一个'4'不显示。 但是,如果您将日志放在 onPageSelected() 方法中,日志就会正确显示。 如何在类里面正确传达分页的值(value)?

最佳答案

ViewPager 创建当前、上一个和下一个 fragment ,您可以使用 ViewPager 的 setOffscreenPageLimit 方法设置和更改数量。 (默认为1,不能设置为0。)

因此,当您将 Log 代码放入 onCreateView 时,您的 3 个 Fragments 将被创建,您将看到 log 三次,而您的 p 变量将是最后一个由于您的默认屏幕限制为 1,因此创建了 fragment 的位置。

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

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

关于java - 传递值 Pager Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43340669/

相关文章:

java - 哈希机制真的安全吗?

java - 与路径route :/WEB-INF/and classpath 有什么区别

java - 如何从 ant CSV 属性中提取第一个元素

java - 使用 Spring JDBC Template 的连接异常

android - 在 kotlin 中对自定义对象列表进行排序

android 应用程序是否可以检测它何时在模拟器与设备上运行

java - Java 小程序的焦点

android - 如何将数据插入我的 Android 应用程序

android - 如何使用 openCV 中的 HoughCircles 检测感兴趣区域中的圆圈?

android - Horizo​​ntalScrollView 中的 ListView 和 ScrollView 中的 Horizo​​ntalScrollView