Android开发笔记(二十五)CoordinatorLayout + Appbar + ViewPager

https://www.jianshu.com/p/4a77ae4cd82f
关于CoordinatorLayout 的写的很好了,有空自己总结一个
记录一下自己对微博个人主页的做法:

先咕会儿,准备直接做databinding

  1. 首先是布局:




    然后做一个只有recycler的布局,用于做pager


具体xml:


  1. 创建一个pager的adapter
    因为这里每个fragment都需要userID的参数,所以在初始化的参数里加了userID
public class UserPagerAdapter extends FragmentPagerAdapter {
    long userID;
    private static final String[] TAB_TITLES = new String[]{"主页","微博","相册"};


    public UserPagerAdapter(@NonNull FragmentManager fm, int behavior, long userID) {
        super(fm, behavior);
        this.userID = userID;
    }

    @Override
    public Fragment getItem(int position) {
        return UserPlaceholderFragment.newInstance(position + 1,userID);
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return TAB_TITLES[position];
    }

    @Override
    public int getCount() {
        return TAB_TITLES.length;
    }

对于UserPlaceholderFragment.newInstance为返回新建的一个fragment
新建使用的的函数如下,采用index来当做fragment的标识,userID是上面传进去的userID,userID通过adapter传进fragment里(其实也可以用父fragment的viewmodel)
创建的时候用打包bundle把index和其他需要的数据放入fragment自带的Argument里

    public static UserPlaceholderFragment newInstance(int index, long userID) {
        UserPlaceholderFragment fragment = new UserPlaceholderFragment();
        Bundle bundle = new Bundle();
        bundle.putInt(ARG_SECTION_NUMBER, index);
        bundle.putLong(ARG_ID, userID);
        fragment.setArguments(bundle);
        return fragment;
    }

fragment在创建的时候从自己的argument里获得index和其他数据(userID),这里同时创建了一个与该子fragment绑定的UserPlaceholderViewModel,用于存放index和其他需要操作的数据。

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        userID = getArguments().getLong(ARG_ID);
        viewModel = new ViewModelProvider(this).get(UserPlaceholderViewModel.class);
        viewModel.setUserID(String.valueOf(userID));
        int index;
        if (getArguments() != null) {
            index = getArguments().getInt(ARG_SECTION_NUMBER);
        } else {
            index = 1;
        }
        viewModel.setIndex(index);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。