1

不確定な進行状況を表示/非表示にするには、次のメソッドを使用する必要があることは明らかです。

itemMenu.setActionView(...);

そう:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_refresh:
            item.setActionView(R.layout.indeterminate_progress_action);
            runAsyncTask();
    ...
    }
}

私には明確ではないのは、アクション ビューを null に戻す方法です。OptionsMenu ライフサイクルについて何も想定したくないので、MenuItem への参照を保持したくありません。

onPostExecuteでアクションビューをnullに戻すにはどうすればよいですか?

4

5 に答える 5

5

私はこのようにします:

refresh = false; // the future state of your indeterminate progress
invalidateOptionsMenu(); // trigger the recreation of the menu and call onCreateOptionsMenu(Menu)

次に、 onCreateOptionsMenu(Menu) メソッドで:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
    super.onCreateOptionsMenu(menu, inflater);

    MenuItem refreshItem = menu.add(Menu.NONE, R.id.action_bar_refresh, 1, "Refresh");
    refreshItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

    if(refresh)
        refreshItem.setActionView(R.layout.indeterminate_progress_action);
    else
        refreshItem.setIcon(R.drawable.ic_menu_refresh);
}
于 2012-09-06T18:59:42.250 に答える
0

どうinvalidateOptionsMenu()ですか?あなたonCreateOptionsMenu()はおそらく常にそれを設定するでしょうnull

于 2012-09-06T18:15:17.310 に答える
0

setActionView(null)そのMenuItemを呼び出すだけでよいと思います

次に、ActionBar を更新します。invalidateOptionsMenu()

于 2012-09-06T18:16:07.727 に答える
0

特定のメニュー項目を操作したくない場合は、操作する必要はありません。

システムの不確定プログレス バー機能 (ActionBarSherlock に移植) を活用する別のアプローチを使用します。ここで説明するのは、将来の読者が自分に最適な方法を使用できるように、より多くのオプションを提供することです.


私の基本フラグメントには、読み込み中の UI のオンとオフを切り替えるために呼び出すメソッドがあります。以下は、縮小版です。

private void setLoading(final boolean isLoading)
{
    final SherlockFragmentActivity sherlockActivity = getSherlockActivity();
    sherlockActivity.runOnUiThread(new Runnable()
    {
        public void run()
        {
            // show loading progress bar
            sherlockActivity
                .setSupportProgressBarIndeterminateVisibility(isLoading);

            // hide the rest of the menu
            setMenuVisibility(!isLoading);
        }
    });
}

これが機能するには、正しいスタイルを使用するようにアクティビティを構成する必要があります。SherlockFragmentActivity.onCreate()メソッドからこれを呼び出します。

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

最後のトリックは、HoneyComb より前のデバイスでは、プログレス バーがデフォルトですぐに表示されるようにすることです (HC 以降ではデフォルトで非表示になるのではなく)。

  • 非表示に設定する必要があります
  • このコードが機能する前に、Sherlock アクション バー インスタンスも作成する必要があります。

したがって、次のonCreate()ようになります。

protected void onCreate(Bundle arg0)
{
    super.onCreate(arg0);

    // allow window to show progress spinner in the action bar
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    getSupportActionBar();
    setSupportProgressBarIndeterminateVisibility(false); 
}

これに関する詳細については、私の回答を確認してください。

于 2012-11-06T09:16:29.553 に答える