http://www.itdecent.cn/p/4a77ae4cd82f
關(guān)于CoordinatorLayout 的寫的很好了,有空自己總結(jié)一個
記錄一下自己對微博個人主頁的做法:
先咕會兒,準備直接做databinding
-
首先是布局:
然后做一個只有recycler的布局,用于做pager
具體xml:
- 創(chuàng)建一個pager的adapter
因為這里每個fragment都需要userID的參數(shù),所以在初始化的參數(shù)里加了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
新建使用的的函數(shù)如下,采用index來當做fragment的標識,userID是上面?zhèn)鬟M去的userID,userID通過adapter傳進fragment里(其實也可以用父fragment的viewmodel)
創(chuàng)建的時候用打包bundle把index和其他需要的數(shù)據(jù)放入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在創(chuàng)建的時候從自己的argument里獲得index和其他數(shù)據(jù)(userID),這里同時創(chuàng)建了一個與該子fragment綁定的UserPlaceholderViewModel,用于存放index和其他需要操作的數(shù)據(jù)。
@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);
}


