如何处理菜单项ActionBar的onClick事件之间的切换

时间:2012-10-15 12:31:18

标签: android android-actionbar

我的问题有点难以解释所以请耐心等待, 我已经为app创建了actionBar,事情是我在actionBar上有5-6个菜单项并使用

处理click事件
onOptionsItemSelected(MenuItem item)

会发生什么事情是每个菜单项点击一个公共区域中的特定视图[即膨胀的视图相互重叠,而不是一个共同的容器], 如果单击另一个项目,我需要删除该视图并膨胀另一个视图,并且我使用简单的if比较语句实现此目的。

虽然解决方案很简单,但实现它并检查这么多条件会使它变得复杂并且代码不可读。

我只是想知道这个问题是否存在更优雅的解决方案?

2 个答案:

答案 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);
            }
    }