2011-12-22 8 views
1

私はを使用してデータベースからデータをロードするListViewActivityを持っています。このアクティビティには、アクティビティリストビューのデータ項目がonPrepareOptionsMenu()にあるかどうかをチェックするオプションメニューがあります。AsyncTaskからActionBarをリフレッシュする

アイテムがある場合、ユーザーがアイテムを削除できるようにするActionBarに表示されているオプションの1つを有効にします。

アクティビティが開始されると、AsyncTaskが起動し、AsyncTaskが実行されている間にonPrepareOptionsMenu()が実行されるため、このメニュー項目は有効になりません。デバイスが反転され、listviewデータがAsyncTaskをバイパスします。

ので、AsyncTaskのonPostExecute()が、私はinvalidateOptionsMenu()呼び出すが、それがリフレッシュするメニューではないようです(私はonCreateOptionsMenu()onPrepareOptionsMenu()でコードをデバッグしている、とどちらも発射される)で。どんな助けもありがたい。

+0

正常に動作するはずです。あなたのasynctaskが現在のアクティビティの内部クラスであるべきではない理由を見ないでください。または別のクラス? – Rejinderi

+0

現在のアクティビティの内部クラス –

+1

私はあなたが 'MyActivity.this.invalidateOptionsMenu()'を正しく呼び出すとしますか?あなたは私の提案を以下に試してデバッグできますか? – Rejinderi

答えて

0

問題は、グローバル変数の値が正しくありませんでした。 onPrepareOptionsMenu()メソッド内のコードを、決して真ではなかったグローバルブール値でゲートウェイしていて、デバッグステートメントをブールチェックの内側に置いていました...デバッグステートメントが実行されていません。

この問題に対処した後、すべてが正常に動作しています。上記のコードは正しいです。

1

アクティビティにhaveDataのようなグローバルブール値を作成し、onPostExecute()にすると、ブール値をtrueまたはfalseに設定できます。次にブール値に基づいてonPrepareOptionsMenu()のチェックを行い、それに応じてメニュー項目を有効にします。

私が最後に試したのは、それがなぜあなたのために行われなかったのか分かりませんでした。それが動作しない場合、そこからデバッグを行い、実行していない場所を教えてください。

+0

それは私の多くの助け、ありがとう – Shajo

関連する問題