0

我不知道如何在某些活动中仅显示选定的操作项。下面是我的代码:

  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);

    } 
....
....
}

因此,每当我需要针对特定​​活动的这些操作项时,我都会将基本活动扩展到我需要的活动。现在我的问题是如何仅在特定活动上设置选定的操作项。假设我不想在一项活动中显示“登录”操作项。我怎样才能完成这项工作?代码片段将不胜感激。

4

1 回答 1

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;
} 
于 2012-12-11T05:06:27.010 回答