在一些活动中隐藏ActionBarSherlock中的一些操作项

时间:2012-12-11 04:43:21

标签: android android-actionbar actionbarsherlock

我没有得到如何仅显示某些活动的选定行动项目。以下是我的代码:

  public abstract class BaseActivity extends SherlockActivity { 


        @Override
        public boolean onCreateOptionsMenu(Menu menu) {

            menu.add("Login")
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

            menu.add("Save")
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);


            return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {

            switch(item.getItemId())
            {


            case 0:
                Intent loginIntent = new Intent(BaseActivity.this,LoginForm.class);
                startActivity(loginIntent);
                return true;

                case 1:
                Intent saveIntent = new Intent(BaseActivity.this,SaveForm.class);
                startActivity(saveIntent);
                return true;
            }
            return false;
        }

    }

在上面的代码中,我正在设置操作项,以便我可以在某些活动中重复使用此操作项而无需重复代码。每当我希望在特定活动上显示这些操作项时,我将在当前活动上扩展此BaseActivity,如下所示。

public class FirstActivity extends BaseActivity {   

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    } 
....
....
}

因此,每当我需要特定活动的这些行动项目时,我就会将基础活动扩展到我需要的活动。现在我的问题是如何只在特定活动上设置选定的操作项。假设我不想在一个活动上显示“登录”操作项。我怎么能这样做?代码片段将不胜感激。

1 个答案:

答案 0 :(得分:1)

现在这是一种合理的方法,但我只会在基本活动中重复使用所有项目。这就是说我认为处理这个问题的正确方法是在这些其他活动中用你想要的实现覆盖这些方法。

您可以在onCreate()中设置一些变量,如果这些变量为true / false,则在onCreateOptionsMenu()

中相应地处理它

修改

要在您自己的活动中覆盖,您只需执行与基本活动相同的操作,但无需调用初始化您不需要的按钮。

如果您想要切换按钮应该是否存在,只需将变量添加到您的基本活动中:

protected boolean mIsLoginButton = true;

将baseactivity中的onCreateOptionsMenu()方法更改为:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        if(mIsLoginButton) {
            menu.add("Login")
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        }
        menu.add("Save")
            .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);


        return true;
    }

然后在你的firstActivity中你只需这样做:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mIsLoginButton = false;
}