使用注意
1.这个工具类只用于简化代码,给底部的view设置监听。
2.使用show ,hide 提供性能
3.这个工具类因为是静态变量,所以只能使用一次,多次使用出现什么问题很难说。(可将static 去除设置为普通实体类)
/**
* @author wzl
*/
/**
* @author wzl
*/
public class MyNavigation {
/* public static List<Fragment> fragmentList;
public static List<View> viewList;*/
/*当前页面*/
private static Fragment cusFragment;
private static OnNavigation onNavigation;
public static OnNavigation getOnNavigation() {
return onNavigation;
}
public static void setOnNavigation(OnNavigation onNavigation) {
MyNavigation.onNavigation = onNavigation;
}
/**
* @param fragmentManager Fragment管理器
* @param flmain 替换id
* @param fragmentList Fragment列表
* @param viewList 底部按钮列表
*/
public static void initNavigation(final FragmentManager fragmentManager, final int flmain, final List<Fragment> fragmentList, List<View> viewList) {
if (fragmentList == null) {
return;
}
if (viewList == null) {
return;
}
if (fragmentList.size() != viewList.size()) {
return;
}
if (!fragmentList.get(0).isAdded()) {
fragmentManager.beginTransaction().add(flmain, fragmentList.get(0)).commit();
// 记录当前Fragment
cusFragment = fragmentList.get(0);
}
for (int i = 0; i < viewList.size(); i++) {
final int finalI = i;
viewList.get(i).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addOrShowFragment(fragmentList.get(finalI), flmain, fragmentManager);
if (getOnNavigation() != null) {
getOnNavigation().onClick(v,finalI);
}
}
});
}
}
private static void addOrShowFragment(Fragment fragment, int id, FragmentManager fm) {
if (cusFragment == fragment) {
return;
}
if (!fragment.isAdded()) {
// 假设当前fragment未被加入,则加入到Fragment管理器中
fm.beginTransaction().hide(cusFragment).add(id, fragment).addToBackStack(null).commit();
} else {
fm.beginTransaction().hide(cusFragment).show(fragment).commit();
}
cusFragment = fragment;
}
public interface OnNavigation {
/**
* @param view 视图
*/
void onClick(View view, int position);
}
}
使用方法
MyNavigation.initNavigation(getFragmentManager(), R.id.fl_daily, mPresenter.getFragments(), getViews());
//fl_daily fragment 替换布局
//getFragments fragment 集合
//getViews 底部按钮集合(用于设置点击监听)