很明显,要显示/隐藏不确定的进度,您必须使用此方法:
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。我不想保留对MenuItem的引用,我认为它不正确,因为我不想假设有关OptionsMenu生命周期的任何内容。
如何在onPostExecute上将操作视图设置为null?
答案 0 :(得分:5)
我这样做:
refresh = false; // the future state of your indeterminate progress
invalidateOptionsMenu(); // trigger the recreation of the menu and call onCreateOptionsMenu(Menu)
然后在你的onCreateOptionsMenu(菜单)方法中:
@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);
}
答案 1 :(得分:0)
invalidateOptionsMenu()
怎么样?您的onCreateOptionsMenu()
可能会始终将其设置为null
,然后。
答案 2 :(得分:0)
我相信您可以在该MenuItem上调用setActionView(null)
然后使用invalidateOptionsMenu()
答案 3 :(得分: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&上面)。
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);
}
有关详细信息,请查看我的答案
答案 4 :(得分:0)
如果您不想保留对菜单项的引用,则可以简单地保留对Menu对象的引用。对文档的引用保证在下次onCreateOptionsMenu()
被调用之前保持有效,如文档(http://developer.android.com/reference/android/app/Activity.html#onCreateOptionsMenu(android.view.Menu))中所述。
然后致电:
MenuItem menuItem = mMenu.findItem(R.id.favourite_payment);
menuItem.setActionView(null);
或者,如果使用AppCompat:
MenuItem menuItem = mMenu.findItem(R.id.favourite_payment);
MenuItemCompat.setActionView(menuItem, null);
无需拨打invalidateOptionsMenu()
。