欢迎回来Android入门教程的第20期,本期继续来学习Fragment。

简而言之呢,Fragment就是一种模块化Activity,拥有自己的生命周期,也直接被Activity的生命周期影响。它不能独立存在,只能镶嵌在Activity中,配合一些组件如ViewPager,可以做出不同效果。

本期来学习ViewPager+Fragment的使用。

首先在你需要嵌入的布局内添加ViewPager

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

然后在代码中获取到这个组件,然后给ViewPager一个监听事件:

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

然后我们再创建一个Fragment,新建一个类继承Fragment。用AS自带的代码提示补全onCreateView和onViewCreated。

public class Fragment extends androidx.fragment.app.Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return super.onCreateView(inflater, container, savedInstanceState);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

    }
}

接着我们新建一个布局,作为这个Fragment的布局。

新建好了之后,在onCreateView内return刚才写好的布局。

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return LayoutInflater.from(getContext()).inflate(R.layout.fragment, container, false);
    }

回到刚才的类中,在viewpager下面继续创建一个List用来保存Fragment,再进行如下操作。

 ViewPager viewPager = findViewById(R.id.viewpager);
        final List<Fragment> fragmentList = new ArrayList<>();
        fragmentList.add(new cn.lovelycatv.androiddevelopment.Fragment());
        fragmentList.add(new cn.lovelycatv.androiddevelopment.Fragment());
        viewPager.setOffscreenPageLimit(3);
        viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int position) {
                return fragmentList.get(position);
            }

            @Override
            public int getCount() {
                return fragmentList.size();
            }
        });

如果需要更多Fragment,只需要向List添加更多类即可。Fragment中的onViewCreated就相当于是Activity的onCreate,需要注意的一点就是,Fragement不能直接findViewById,需要使用 onViewCreated 提供的View变量来获取,例如view.findViewById()。

实机运行的效果就是可以左右滑动的一个模块,可以自己尝试一下,这里就不做演示了。


那么本期教程就到此结束了,感谢观看!


0 条评论

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注