首页tab与Fragment的使用
原理:拿到事务之后进行操作,常见的有hide,show,add,remove等
代码:
private void replaceFragment(Fragment fragment){
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.fl_layout,fragment);
}
private void hideAndShowFragment(Fragment from,Fragment to){
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
if(!to.isAdded()){
transaction.hide(from).add(R.id.fl_layout,to).commit();
}else{
transaction.hide(from).show(to).commit();
}
}
commit和commitAllowingStateLoss区别:
commitAllowingStateLoss类似Commit,但是允许Activity状态被保存了之后调用,也就是说activity调用了onSaveInatanceState()之后再调用Commit的话会抛出异常,但是使用CommitAllowingStateLoss就不会
Fragmnt的懒加载的实现
//判断对用户是否可见:
public abstract class BaseLazyFragment extends Fragment {
protected boolean isViewInitiated;
protected boolean isVisibleToUser;
protected boolean isDataInitiated;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
isViewInitiated = true;
prepareFetchData();
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
this.isVisibleToUser = isVisibleToUser;
prepareFetchData();
isHindToUser(isVisibleToUser);
}
public abstract void fetchData();
public boolean prepareFetchData() {
return prepareFetchData(false);
}
public boolean prepareFetchData(boolean forceUpdate) {
if (isVisibleToUser && isViewInitiated && (!isDataInitiated || forceUpdate)) {
fetchData();
isDataInitiated = true;
return true;
}
return false;
}
/**
* 对用户隐藏的时候,让子类复写去实现自己的逻辑
* @param isHind
*/
public void isHindToUser(boolean isHind){
}
/**
* 当页面显示的时候,让子类复写去实现自己的逻辑,通常用在父Fragment向子Fragment进行通信
*/
public void showDoSomeThing(Object object){
}
public boolean isShowToUser(){
return this.isVisibleToUser;
}
}
推荐
Fragmentation github.com/YoKeyword/F…