0

我的问题有点难以解释,所以请多多包涵,我已经为一个应用程序实现了 actionBar,问题是我在 actionBar 上有 5-6 个菜单项并使用处理点击事件

onOptionsItemSelected(MenuItem item)

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

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

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

4

2 回答 2

0

保留对最后一个膨胀视图的引用:

private View lastInflatedView;

onOptionsItemSelected方法中隐藏具有此引用的视图并将其设置为下一个膨胀。

if (lastInflatedView != null) {
 lastInflatedView.setVisibility(View.GONE);
}

View newView = //inflate here
lastInflatedView = newView;
于 2012-10-15T12:34:15.557 回答
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);
            }
    }
于 2012-10-15T12:37:01.790 回答