1

私はアンドロイドが初めてで、アクションバーボタンのアクションリストナーコードをどこに記述すればよいかわかりません。これにより、すべてのアクティビティでアクションリストナーコードを記述する必要がなくなります。

下の画像を見てください: アクション バー メニュー用の menu.xml ファイルがあり、onCreateOptionMenu 関数を介してアクティビティの 1 つに追加されています。ユーザーがアクションバーのボタンのいずれかをクリックすると、onOptionItemSelected 関数を介して追跡できます。

問題 1: 他のすべてのアクティビティについて、同じ menu.xml ファイルを使用できますが、各アクティビティの onCreateOptionMenu 関数をオーバーライドする必要がありますか。

問題 2: すべてのアクティビティで onOptionItemSelected 関数コードを記述する必要がありますか?

これらの問題のより良い解決策を教えてください。

ここに画像の説明を入力

4

2 に答える 2

0

問題 1: 他のすべてのアクティビティについて、同じ menu.xml ファイルを使用できますが、各アクティビティの onCreateOptionMenu 関数をオーバーライドする必要がありますか。

はい、switch ステートメントでメニュー オプションを処理するコードを追加するだけです。

問題 2: すべてのアクティビティで onOptionItemSelected 関数コードを記述する必要がありますか?

はい、アクション バーを使用しているアクティビティごとに、onOptionItemSelected 関数をオーバーライドし、カスタム コードを追加する必要があります。

例えば:

    @Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_watchlist:
            Intent intent = new Intent(HomeActivity.this, WatchlistActivity.class);
            intent.putExtra("username", currentUser.getUsername());
            startActivityForResult(intent, 0);
            return true;
        case R.id.menu_history:
            Intent intent2 = new Intent(HomeActivity.this, HistoryActivity.class);
            intent2.putExtra("username", currentUser.getUsername());
            startActivityForResult(intent2, 0);
            return true;
        case R.id.menu_scores:
            // Scores only available with Facebook login
            if (facebookLogin)
            {
                Intent scoreIntent = new Intent(HomeActivity.this, ScoresActivity.class);
                scoreIntent.putExtra("username",  currentUser.getUsername());
                scoreIntent.putExtra("accessToken",  accessToken);
                Session session = Session.getActiveSession();
                scoreIntent.putExtra("session", session);
                startActivityForResult(scoreIntent, 0);
            }
            else
                Toast.makeText(getApplicationContext(), "Please login to Facebook to use this feature.", Toast.LENGTH_SHORT).show();
            return true;
        case R.id.menu_settings:
            Intent intent3 = new Intent(HomeActivity.this, SettingsActivity.class);
            intent3.putExtra("username", currentUser.getUsername());
            startActivityForResult(intent3, 0);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
于 2013-04-25T20:27:03.730 に答える