アプリの ActionBar で「更新」アイコンを一貫してアニメーション化する際に問題が発生しています。
ユーザーがアプリをナビゲートするときにフラグメントをスワップインおよびスワップアウトするコンテナー FragmentActivity があります (フラグメント自体または SlidingMenu オプションから)。したがって、アプリが最初に読み込まれると、FragmentContainer は FragA を追加します。ユーザーは FragA から FragB に移動でき、FragB はスワップインされます。
アクション バーに静的な「更新」アイコンを表示します。各 Fragment が読み込まれるたびに、これをアニメーション化された「スピナー」アイコンに置き換えます。ロードが完了すると、元の更新アイコンに戻ります。
問題は、このアニメーションが元のフラグメント (この場合は FragA) に対してのみ機能することです。ユーザーが FragB に移動して更新アイコンを選択すると、更新がトリガーされますが、アニメーションは発生しません。同様に、戻るボタンを押して FragA に戻る場合、これは同じパターンに従います。つまり、更新ボタンを押してもアニメーションしません。
注意事項...
- https://github.com/jfeinstein10/SlidingMenuで ActionBarSherlock と SlidingMenu 実装を使用しています。したがって、上記のアクティビティは実際には
SlidingFragmentActivity
. - 両方のフラグメント呼び出し
setHasOptionsMenu(true)
- 私はこれをデバッグしonCreateOptionsMenu
、それぞれに対して正しく呼び出されています。 - 両方のフラグメントのアイコンが正しく表示されています。「デフォルト」のフラグメントから移動すると、アニメーションが発生しません。
- SlidingMenu を使用してナビゲートすると同じ動作が見られます - FragA がロードされ、アニメーションが動作します -> SlidingMenu を使用して別のフラグメントに移動します... アニメーションが機能しません -> FragA に戻るボタン... アニメーションが機能しませんここでも。
- 以前に戻るボタンの問題があったのではなく、
FragmentTransaction.remove()
andを使用しています-互換性ライブラリを使用していますが、実装に少しバグがあることをここで読みました-使用しないことで、私が見ていた問題が確実に修正されました.add()
replace()
replace()
replace
以下のコード スニペット:
元のフラグメントをロードする私のコードは....
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.content_frame, new FragA());
ft.addToBackStack(null);
ft.commit();
FragB を FragA に「スワップ」するには....
public void switchContent(PysoBaseFragment fragment) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.remove(existingFragment);
ft.add(R.id.content_frame, fragment);
ft.addToBackStack(null);
ft.commit();
}
このメソッドはコンテナー アクティビティで宣言され、FragA から呼び出されます。
getFragmentContainer().switchContent(new FragB());
アイコンを回転させるコードは、新しい Fragment の読み込み開始時に呼び出されます。そのようなもの...
ImageView spinnerActionView = (ImageView) inflater.inflate(R.layout.refresh_action_view, null);
Animation rotation = AnimationUtils.loadAnimation(this, R.anim.rotate_animation);
rotation.setRepeatCount(Animation.INFINITE);
spinnerActionView.startAnimation(rotation);
menuItemRefresh = menu.findItem(R.id.menu_refresh);
menuItemRefresh.setActionView(spinnerActionView);
Whereが呼び出されるとmenu
、コンテナのインスタンス変数に割り当てられます。onCreateOptionsMenu
アップデート:
この分野で別の奇妙なバグに気づきました(これを別の質問として追加できてうれしいですが、元の問題に光を当てることを期待してここで更新しています-両方が原因であると信じていますフラグメントからアクションバーをどのように構成したか)。
フラグメントを初めてロードすると、1 つの静的更新アイコンが表示されます。画面を回転すると...別の更新アイコンが表示されます...画面を元に回転すると、3番目の更新アイコンが表示されます!
それでも見知らぬ人は、戻るボタンをクリックすると、追加の各アイコンが順番に削除され、最後に (4 回目のクリックで) 前の画面に戻ります。