1.fragment切换
当我们使用fragmentManager通过事务beginTransation管理多个fragment对象的时候,就要合理的显示和隐藏Fragment。
1.把所有需要管理的Fragment加入到事务中。同时显示需要的Fragment,隐藏其他的。 同时记录当前的Fragmet引用。便于切换到其他fragment,使用hide方法,隐藏它。
zhihuFragment = new ZhihuFragment();
wxFragment = new WxFragment();
gankFragment = new GankFragment();
supportFragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
fragmentTransaction
.add(R.id.content, zhihuFragment)
.add(R.id.content, wxFragment)
.add(R.id.content, gankFragment)
.show(zhihuFragment)
.hide(wxFragment)
.hide(gankFragment)
.commit();
lastFragment = zhihuFragment;
2.切换fragment
navigation.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.zhihu:
if (!menuItem.isChecked()){
menuItem.setChecked(true);
type = ZHIHU_TYPE;
switchFragment();
}
break;
case R.id.wx:
type = WEIXIN_TYPE;
switchFragment();
break;
case R.id.gank:
type = GANK_TYPE;
switchFragment();
break;
}
drawerLayout.closeDrawer(Gravity.LEFT);
return false;
}
});
public void switchFragment() {
Fragment currFragment = getCurrFragment();
FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
fragmentTransaction.show(currFragment)
.hide(lastFragment)
.commit();
// 切换完毕后,记录当前fragmetn,便于下次隐藏该fragment使用。
lastFragment = currFragment;
}
/**
* 获取当前 点击的fragment 对象
* @return
*/
private Fragment getCurrFragment() {
switch (type) {
case ZHIHU_TYPE:
if (zhihuFragment == null) {
zhihuFragment = new ZhihuFragment();
}
return zhihuFragment;
case WEIXIN_TYPE:
if (wxFragment == null) {
wxFragment = new WxFragment();
}
return wxFragment;
case GANK_TYPE:
if (gankFragment == null) {
gankFragment = new GankFragment();
}
return gankFragment;
}
return null;
}
2.侧滑菜单–分类标题
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="资讯">
<menu>
<item
android:id="@+id/zhihu"
android:icon="@mipmap/ic_drawer_zhihu"
android:title="知乎日报" />
<item
android:id="@+id/wx"
android:icon="@mipmap/ic_drawer_wechat"
android:title="微信精选" />
<item
android:id="@+id/gank"
android:icon="@mipmap/ic_drawer_gank"
android:title="干货集中营" />
<item
android:id="@+id/gold"
android:icon="@mipmap/ic_drawer_gold"
android:title="稀土掘金" />
<item
android:id="@+id/vtex"
android:icon="@mipmap/ic_drawer_vtex"
android:title="V2EX" />
</menu>
</item>
</menu>
3.侧滑菜单–选中效果
//如果有当前选择过的菜单,点击其他菜单
//重置以前的选中状态
if (lastMenuItem!=null){
lastMenuItem.setChecked(false);
lastMenuItem.setCheckable(false);
}
//设置当前菜单的选中状态
menuItem.setChecked(true);
menuItem.setCheckable(true);
// 记录当前选中的菜单
lastMenuItem = menuItem;