我的问题有点难以解释所以请耐心等待, 我已经为app创建了actionBar,事情是我在actionBar上有5-6个菜单项并使用
处理click事件onOptionsItemSelected(MenuItem item)
会发生什么事情是每个菜单项点击一个公共区域中的特定视图[即膨胀的视图相互重叠,而不是一个共同的容器], 如果单击另一个项目,我需要删除该视图并膨胀另一个视图,并且我使用简单的if比较语句实现此目的。
虽然解决方案很简单,但实现它并检查这么多条件会使它变得复杂并且代码不可读。
我只是想知道这个问题是否存在更优雅的解决方案?
答案 0 :(得分:0)
保留对最后一个膨胀视图的引用:
private View lastInflatedView;
onOptionsItemSelected
方法中的使用此引用隐藏视图,并将其设置为下一个膨胀。
if (lastInflatedView != null) {
lastInflatedView.setVisibility(View.GONE);
}
View newView = //inflate here
lastInflatedView = newView;
答案 1 :(得分:0)
我假设你在这个“公共区域”使用片段,如果你不使用,你应该开始使用。代码非常简单(ps。我是从内存中编写的,所以修复我可能遇到的任何错误):
onOptionsItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.menu_item_1:
// Instantiate the fragment for the item_1
Fragment frag = new ... etc.... etc
// note I'm using replace, so it will remove whatever was there before.
getFragmentManager.beginTransaction().replace(R.id.common_area, frag).commit();
return true;
case R.id.menu_item_2: // repeat for all the menus
default:
return super.onOptionsItemSelected(item);
}
}