2012-03-06 13 views
4

私はAndroidアプリで奇妙な問題に遭遇しました。私の主なアクティビティにはメニューボタンが付いています。問題は、メニューボタンが一度正しく機能することです。一度押すと、メニューボタンが再び機能する前にアプリを再起動する必要があります。Androidメニューはアプリの実行ごとに1回しか動作しません

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    setContentView(R.layout.main); 

    settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
} 



@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    startActivity(new Intent(this, PreferencesActivity.class)); 

    return(super.onCreateOptionsMenu(menu)); 
} 

@Override 
public void onBackPressed() { 
    this.finish(); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    this.finish(); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    this.finish(); 
} 

や好みの活動は、私はこの問題を解決する方法

public class PreferencesActivity extends PreferenceActivity { 

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

     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     addPreferencesFromResource(R.xml.preferences); 
    } 

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

    @Override 
    public void onStop() { 
     super.onStop(); 
     this.finish(); 
    } 

    @Override 
    public void onBackPressed() { 
     this.finish(); 
    } 
} 

任意のアイデアを次のようになります。

(消毒)のコードはありますか?

TIA

答えて

5

onCreateOptionsMenuは、あなただけはOptionsMenuを最初に開く直前に、一度呼び出されます。 代わりにonPrepareOptionsMenuを使用してstartActivity(new Intent(this, PreferencesActivity.class));
onPrepareOptionsMenuが呼び出されます。これは、メニューボタンをクリックするたびに呼び出されます。

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    startActivity(new Intent(this, PreferencesActivity.class)); 
    return super.onPrepareOptionsMenu(menu); 
} 
+0

これを拡張できますか? onPrepareOptionsMenuがどこにある必要があるのか​​はわかりません。 – user1174838

+0

onCreateOptionsMenuの場合と同様に、アクティビティクラスのonPrepareOptionsMenuをオーバーライドする必要があります。あなたのコードを表示するために私の答えを更新しました。 – Thommy

+0

が主な活動のために働いているように見えますが、子供の活動のためには働いていないようです。私が子アクティビティにいて、メニューボタンを押した後、戻るボタンを押すと、メインアクティビティに移動します。 – user1174838

1

問題は、メニューを表示する代わりにアクティビティを開始することです。 通常の方法は、onCreateオプションメニュー内にメニューを展開し、このメニューに設定項目がある場合です。このメニューには、プリファレンス操作が表示されます。

Thommyが正しいです。あなたがすぐに環境設定アクティビティを開始したい場合(これはAndroid Appの異常な動作であることに注意してください)、onPrepareOptionsMenuでこれを行うことができます。 通常のフローでは、メニューはonCreateOptionsMenuコールバックで1回作成され、その後は再利用されます。

+0

私のアプリはいくつかの活動をしています。初期アクティビティには、子アクティビティの1つ(同様に実装されている)と同様にメニュー(/res/xml/preferences.xmlに実装されています)があります。私は、メニューボタンが押されると、固有メニューが表示され、戻るボタンが押されると、呼び出しアクティビティが再び表示されます。ユーザーは必要な回数だけメニューにアクセスできるはずです。情報のおかげで – user1174838

+0

ありがとうございます。私はこれについていくつか読んで行く必要があります。 – user1174838

0

メニューボタンをクリックすると、PreferencesActivityに移動し、そこをクリックするたびに、最初のアクティビティはonBackPressedメソッドによって閉じられます。

あなたが探しているものを正確に教えてもらえますか?

+0

間違ったテキストエリアにコメントを追加しました。上記を参照 – user1174838

+0

すべてのアクティビティで同じメニューオプションを使用しますか?すべてのメソッドでthis.finish()を削除し、onCreateOptionsMenuメソッドの名前をonPrepareOptionsMenuに変更してみてください。 – Pavandroid

+0

nope。主なアクティビティには、アプリのデモモードを有効または無効にするメニューオプションがあります。 1つの子アクティビティだけがメニューを持ち、そのアクティビティの動作に影響します。 – user1174838