1

私の主なアクティビティにはメニューがあり、メニューオプションが選択されるとインテントが作成され、新しいアクティビティが開始されます。そのアクティビティが完了すると、ActivityLifeCycle に従って、プロセスはメイン アクティビティとその以前のすべての状態に戻る必要があります。

メイン アクティビティに戻ると、何もアクセスできず、画面が暗くなることに気付きました。メニュー ソフトキーを押したときだけ、期待どおりの状態に戻ることができます。

以前にこの問題を経験した人はいますか? フィードバックをいただければ幸いです。以下のコードサンプル:

@Override
protected void onResume(){          
    super.onResume();
}

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
    case R.id.menu_settings: 
        return true;            
    case R.id.menu_decks:
        Intent launchDecks = new Intent(this, stackDecks.class);
        startActivity(launchDecks);             
        return true;        
    case R.id.menu_exit:  
        this.onDestroy();
        this.finish();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}   
4

2 に答える 2

2

最初の投稿のコードは実際には正しいです (私は非常に似たものを持っています)。問題なく膨張する場合でも、エラーが menu.xml res ファイルにある可能性が高くなります。両方の場所で完全に一致しており、同じ項目があることを確認してください。何時間もの実験の末、ようやく解決しました。

于 2011-12-10T09:10:44.610 に答える
0

あなたはスーパーの使い方を混同しているようでした。

super.m() は、スーパークラス メソッドを呼び出すために使用されます。

オーバーライドなしでメソッドを継承する場合は、super.m() = this.m() super.onDestroy を参照してください

super.m() を呼び出すためだけにメソッド m() をオーバーライドするのは絶対に無意味です onResume を参照してください

スーパー クラス メソッドを呼び出すと便利な場合があります。これにより、サブクラスでこのコードの恩恵を受けることができます。たとえば、ここでは onCreateMenuOptions がオーバーライドされ、サブクラスはメニューの初期化コードの恩恵を受けることができます。

よろしく、ステファン

于 2011-08-29T02:22:49.157 に答える