如何在Indeterminate ProgressBar
中按下Refresh
按钮时显示ActionBarSherlock
,并在刷新ViewGroup时再次显示刷新按钮?
更新1: 我在这里有一个不完整的答案。我正在提出一个问题的赏金,以便更多的开发人员可以帮助建立一个对将来有用的好答案。
我们如何显示Indeterminate ProgressBar
,如下图所示
答案 0 :(得分:31)
似乎ActionBarSherlock没有提供动画刷新MenuItem的特定方法。
你可以做的(通过使用经典的android API)是使用setActionView(int resId)
方法并给出一个带有ProgressBar的布局的id。
在刷新操作开始时,请致电:
item.setActionView(R.layout.refresh_menuitem);
当您的刷新操作完成后,请致电:
item.setActionView(null);
以下是您的布局文件 refresh_menuitem.xml 可以包含的示例:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:addStatesFromChildren="true"
android:focusable="true"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:gravity="center"
style="?attr/actionButtonStyle">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="true"
style="@android:style/Widget.ProgressBar.Small"/>
</LinearLayout>
答案 1 :(得分:10)
以下是如何使用ActionBarSherlock
对象添加此类不确定的ProgressBar :(实际上,另一个更容易,但progressBar单独显示,而不是MenuItem
上方
1 - 在setContentView()调用之前将此行放在onCreate()方法中:
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
- &GT;此行指定您将使用不确定的ProgressBar函数。
2 - 通过调用:
启用不确定的ProgressBarsetSupportProgressBarIndeterminateVisibility(true);
3 - 通过调用:
禁用不确定的ProgressBarsetSupportProgressBarIndeterminateVisibility(false);
备注:查看ActionBarSherlock文件夹的示例文件夹。我在以下文件中找到了这段代码: 的 JakeWharton-ActionBarSherlock-9598f2b \样品\演示\ SRC \ COM \ actionbarsherlock \样品\演示\ IndeterminateProgress.java 强>
答案 2 :(得分:2)
这是一个完整的代码:
private static final int menuItemIdRefresh = 10; //class constant
private boolean refresh;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem refreshItem = menu.add(0, menuItemIdRefresh, 0,
getString(R.string.action_refresh)).setShowAsActionFlags(
MenuItem.SHOW_AS_ACTION_ALWAYS);
if (isRefreshing) {
refreshItem.setActionView(R.layout.indeterminate_progress);
} else {
refreshItem.setActionView(null);
refreshItem.setIcon(R.drawable.ic_refresh);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case menuItemIdRefresh: {
//the user has pressed the refresh button
if (!isRefreshing) {
isRefreshing = true;
new RefreshMyViewAsyncTask().execute("");
}
}
break;
default:
break;
}
return false;
}
最后一点,为了使上述代码正常工作,您还需要调用supportInvalidateOptionsMenu()。您可以将它添加到RefreshMyViewAsyncTask的onPreExecute()方法。
希望这对某人有帮助。