十分钟学会Fragment复用

2019-06-04  本文已影响0人  崽子猪

废话不多说我们直接上代码

我们首先创建两个Fragment

FragmentA布局需要写Tab栏与ViewPager对应

<LinearLayout android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
tools:context="com.example.weekday02demo3.view.fragment.ProjectFragment"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <!-- TODO: Update blank fragment layout -->

    <android.support.design.widget.TabLayout
        android:id="@+id/tab"
        ***app:tabMode="scrollable"***
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

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

</LinearLayout>

随后我们需要给tab栏赋值,我们这边是通过解析玩安卓接口获取的数据
// 项目分类 http://www.wanandroid.com/project/tree/json
// 项目列表数据 http://www.wanandroid.com/project/list/1/json?cid=294

我们首先在FragmentB界面定义一个方法来获取数据里所对应的ID[将FragmentA与FragmentB建立连接]

 public static Fragment isListFragment(int id){

        ListFragment listFragment = new ListFragment();

        Bundle bundle = new Bundle();
        bundle.putInt("id",id);
        listFragment.setArguments(bundle);

        return listFragment;
    }

然后回到FragmentA界面通过For循环把Id值发送到FragmentB然后通过Bean类给Tab栏赋值

ProjectBean projectBean = gson.fromJson(data, ProjectBean.class);
        List<ProjectBean.DataBean> projectTabList = projectBean.getData();

        ArrayList<Fragment> fragments = new ArrayList<>();

        if ( projectBean != null && projectTabList != null && projectTabList.size() > 0 ){

            for (ProjectBean.DataBean dataBean : projectTabList) {

                Fragment listFragment = ListFragment.isListFragment(dataBean.getId());
                fragments.add(listFragment);

            }

            FragmentAdapterTwo fragmentAdapterTwo = new     FragmentAdapterTwo(getChildFragmentManager(), fragments, projectTabList);
            vp.setAdapter(fragmentAdapterTwo);
            tab.setupWithViewPager(vp);

        }

FragmentA的适配器[FragmentAdapterTwo]

  public FragmentAdapterTwo(FragmentManager fm, ArrayList<Fragment> fragments, List<ProjectBean.DataBean> projectTabList) {
        super(fm);
        this.fragments = fragments;
        this.projectTabList = projectTabList;
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

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

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return projectTabList.get(position).getName();
    }

回到FragmentB界面获取对应的ID解析页面数据
在onCreate()方法里获取Id

 Bundle arguments = getArguments();
        id = arguments.getInt("id");

接下来就是RecycleView绑定适配器的操作了,本片Fragment复用到这里就结束了希望对大家有所帮助

上一篇 下一篇

猜你喜欢

热点阅读