4

メニューを持つ基本アクティビティを作成しました。このメニューは、アプリケーション内の他のアクティビティを開きます。

public class BaseActivity extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    //Intent i = new Intent("com.app.Activity1");
    //startActivity(i);

     }

@Override
public boolean onCreateOptionsMenu(Menu menu){
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.icon:     Intent i1 = new Intent("com.app.Activity1");
                            startActivity(i1);
                            break;
        case R.id.text:     Intent i2 = new Intent("com.app.Activity2");
                            startActivity(i2);
                            break;
        case R.id.icontext: Intent i3 = new Intent("com.app.Activity3");
                            startActivity(i2);                              
                            break;
    }
    return true;
}
}

すべてのアクティビティはこの基本アクティビティを拡張するため、メニューボタンを押すと、メニューがポップアップし、アクティビティを選択できます。

ただし、メニューを使用してアクティビティAに移動するとします。アクティビティに入ると、AIはメニューを使用してアクティビティAに再度移動できます。これはX回実行できますが、戻るボタンは同じアクティビティにX回戻ります。

ユーザーが同じアクティビティを開き続けることができないように、アクティビティがすでに実行されているかどうかを確認するにはどうすればよいですか?

むしろ、アクティビティAでメニュー項目を一度無効にすることをお勧めしますか?

ご入力いただきありがとうございます。これが些細な質問のように思われる場合は申し訳ありません。

4

4 に答える 4

2

私はあなたがそれをする必要はないと思います。あなたはあなたのAndroidManifest.xmlであなたの活動のlaunchMode="singleTask".Codeを指定するだけだと思います:

<activity android:name=".com.app.Activity1" android:launchMode="singleTask" android:configChanges="orientation|keyboardHidden" android:screenOrientation="portrait"></activity>
<activity android:name=".com.app.Activity2" android:launchMode="singleTask" android:configChanges="orientation|keyboardHidden" android:screenOrientation="portrait"></activity>
<activity android:name=".com.app.Activity3" android:launchMode="singleTask" android:configChanges="orientation|keyboardHidden" android:screenOrientation="portrait"></activity> 

^-^

于 2012-08-02T05:48:10.610 に答える
2

これには簡単な解決策があります。次のように、現在のアクティビティのメニュー項目を無効にしonPrepareOptionsMenu()ます。BaseActivity

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    // Determine what activity I am and find the menu item for that activity
    MenuItem menuItem = null;
    if (getClass().equals(com.app.Activity1.class)) {
        menuItem = menu.findItem(R.id.icon);
    } else if (getClass().equals(com.app.Activity2.class)) {
        menuItem = menu.findItem(R.id.text);
    } else if (getClass().equals(com.app.Activity3.class)) {
        menuItem = menu.findItem(R.id.icontext);
    }
    // Disable this menu item
    if (menuItem != null) {
        menuItem.setEnabled(false); // Make it non-selectable (even with shortcut)
        menuItem.setVisible(false); // Make it non-visible
    }
    return true;
}
于 2012-08-02T14:48:08.277 に答える
0

ささいな解決策の一種-baseActivityに「intchoice」と呼ばれるグローバルintを入れてみませんか?アクティビティに切り替えるときは、そのアクティビティに選択肢を設定するだけです。例えば

case R.id.icon:
   if (choice != 1){
      startActivity(i1);
      choice = 1;
   }
   break;
于 2012-08-02T05:49:00.457 に答える
0

これは、次の2つの方法で実装できます。

  1. アクティビティAからアクティビティAを呼び出すには、フラグを付けて呼び出します。これによりFLAG_ACTIVITY_REORDER_TO_FRONT、新しいインスタンスを作成せずにAが再度呼び出されるため、戻っても問題は発生しません。

  2. あなたが言ったように、アクティビティAが前にある場合は、アクティビティAのメニュー項目を無効にします。

于 2012-08-02T05:49:45.310 に答える