ボタンが押されたIndeterminate ProgressBar
ときに表示し、ViewGroupが更新されたときに[更新]ボタンを再度表示するにはどうすればよいですか?Refresh
ActionBarSherlock
更新1: ここに不完全な答えがあります。より多くの開発者が将来他の人に役立つ良い答えを作るのを助けることができるように、私は質問に賞金をかけています。
Indeterminate ProgressBar
下の画像に示すようなものをどのように表示できますか
ボタンが押されたIndeterminate ProgressBar
ときに表示し、ViewGroupが更新されたときに[更新]ボタンを再度表示するにはどうすればよいですか?Refresh
ActionBarSherlock
更新1: ここに不完全な答えがあります。より多くの開発者が将来他の人に役立つ良い答えを作るのを助けることができるように、私は質問に賞金をかけています。
Indeterminate ProgressBar
下の画像に示すようなものをどのように表示できますか
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>
この種の不確定なProgressBarをActionBarSherlock
オブジェクトに追加する方法は次のとおりです:(実際には他の方が簡単ですが、progressBarは単独で表示され、上には表示されませんMenuItem
)
1-この行をonCreate()メソッドに入れてから、setContentView()を呼び出します。
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
->この行は、不確定なProgressBar関数を使用することを指定します。
2-:を呼び出して、不確定なProgressBarを有効にします。
setSupportProgressBarIndeterminateVisibility(true);
3-:を呼び出して、不確定なProgressBarを無効にします。
setSupportProgressBarIndeterminateVisibility(false);
備考:ActionBarSherlockフォルダーのサンプルフォルダーをご覧ください。このコードは次のファイルで見つかりました: JakeWharton-ActionBarSherlock-9598f2b \ samples \ demos \ src \ com \ actionbarsherlock \ sample \ demos \ IndeterminateProgress.java
完全なコードは次のとおりです。
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()メソッドに追加できます。
これが誰かに役立つことを願っています。