Android基础之Fragment Viewpager篇

本文介绍如何在Android Studio中使用Fragment和ViewPager。通过初始化ViewPager,添加数据,设置监听事件和Adapter,实现Fragment的滑动切换。特别提到了在Adapter中防止Fragment栈过多导致崩溃的处理,并提供了完整的Demo下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本例使用Android Studio进行开发

*展示效果如图:
优快云图标

对于所有的Viewpager控件的使用基本根据以下操作作为模板

  1. 初始化viewpager控件
  2. 添加数据
  3. Viewpager设置监听事件
  4. viewapager设置adapter
  • Adapter文件MyFragmentPagerAdapter.java(能够自动删除Fragment元素,避免Frament栈过多导致程序崩溃)


public class MyFragmentPagerAdapter extends FragmentStatePagerAdapter {

    private List fragList;
    public MyFragmentPagerAdapter(FragmentManager fm, List fragList) {
        super(fm);
        // TODO Auto-generated constructor stub
        this.fragList=fragList;
    }

    @Override
    public Fragment getItem(int arg0) {
        // TODO Auto-generated method stub
        return fragList.get(arg0);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return fragList.size();
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // TODO Auto-generated method stub
        super.destroyItem(container, position, object);
    }

    @Override
    public Object instantiateItem(ViewGroup arg0, int arg1) {
        // TODO Auto-generated method stub
        return super.instantiateItem(arg0, arg1);
    }

}

*__MainActivity__


public class MainActivity extends AppCompatActivity implements View.OnClickListener, ViewPager.OnPageChangeListener{

    private List fragList;
    private ViewPager pager;
    //使用layout控制底部栏在于提高用户体验,便于点击
    private RelativeLayout bottom_menu_one_Layout,bottom_menu_two_Layout,bottom_menu_three_Layout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init_layout();
        init_fragmentViewpager();
    }

    //设置底部按钮点击事件
    public void init_layout(){
         /*
        * 初始化底部按钮控件所在的布局
        * */
        bottom_menu_one_Layout=(RelativeLayout)findViewById(R.id.bottom_menu_one_Layout);
        bottom_menu_two_Layout=(RelativeLayout)findViewById(R.id.bottom_menu_two_Layout);
        bottom_menu_three_Layout=(RelativeLayout)findViewById(R.id.bottom_menu_three_Layout);
         /*
        * 底部菜单栏设置点击事件
        * */
        bottom_menu_one_Layout.setOnClickListener(this);
        bottom_menu_two_Layout.setOnClickListener(this);
        bottom_menu_three_Layout.setOnClickListener(this);
    }

    //设置点击事件
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.bottom_menu_one_Layout:
                pager.setCurrentItem(0);
                break;
            case R.id.bottom_menu_two_Layout:
                pager.setCurrentItem(1);
                break;
            case R.id.bottom_menu_three_Layout:
                pager.setCurrentItem(2);
                break;
        }
    }

    //设置Viewpager
    public void init_fragmentViewpager(){
        /*
        * 初始化viewpager控件
        * */
        pager=(ViewPager) findViewById(R.id.main_viewpager);
        fragList=new ArrayList();
        /*
        * 为fragmentViewpagerList添加fragment
        * */
        fragList.add(new Fragment1());
        fragList.add(new Fragment2());
        fragList.add(new Fragment3());
        /*
        * 添加Viewpager滑动监听事件
        * */
        pager.setOnPageChangeListener(this);
        /*
        * viewapager设置adapter
        * */
        MyFragmentPagerAdapter adapter=new MyFragmentPagerAdapter(getSupportFragmentManager(),fragList);
        pager.setAdapter(adapter);
    }


    //Viewpager重写方法
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        //翻页时事件
    }

    @Override
    public void onPageSelected(int position) {
        //该方法为当前选定页面事件
    }

    @Override
    public void onPageScrollStateChanged(int state) {
        //该方法为翻页状态变化事件
    }

*__activity_main.xml核心部分__


<RelativeLayout
            android:id="@+id/content_layout"
            android:layout_marginBottom="48dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <android.support.v4.view.ViewPager
                android:id="@+id/main_viewpager"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
            </android.support.v4.view.ViewPager>

        </RelativeLayout>

        <fragment
            android:id="@+id/menu_fragment"
            android:layout_width="match_parent"
            android:layout_height="55dp"
            android:name="com.example.boy.viewpager_demo.Button_menu_Fragment"
            tools:layout="@layout/bottom_menu"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"></fragment>

*ps:在Android Studio中使用Fragment做组件必须添加android:name属性

完整demo地址:http://download.youkuaiyun.com/detail/enough_empty/9633256

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值