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

    } 
....
....
}

そのため、特定のアクティビティでこれらのアクション アイテムが必要なときはいつでも、ベース アクティビティを必要なアクティビティに拡張しています。今私の問題は、特定のアクティビティで選択したアクション アイテムのみを設定する方法です。1 つのアクティビティで「ログイン」アクション アイテムを表示したくないとします。どうすればこれを行うことができますか? コードスニペットをいただければ幸いです。

4

1 に答える 1

1

今では合理的なアプローチですが、baseactivity のすべてで再利用されたアイテムしかありません。そうは言っても、これを処理する正しい方法は、これらの他のアクティビティで必要な実装でメソッドをオーバーライドすることだと思います。

onCreate() で設定されたいくつかの変数を持つことができます。これらが true/false の場合、onCreateOptionsMenu() でそれに応じて処理されます。

編集

独自のアクティビティでオーバーライドするには、単純に baseactivity と同じことを行いますが、必要のないボタンの初期化を呼び出す必要はありません。

代わりに、ボタンが存在するかどうかを切り替えたい場合、または単純に変数を baseactivity に追加したい場合は、次のようにします。

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 に答える