下の画像を見てください
左側のパネルには、チケットと監査という名前の 2 つのカテゴリがあり、それぞれに戻るボタンがあります。チケットは 2ListView's
です。1st の項目をクリックするListview
と、2nd が開きListview
ます。同時に、戻るをクリックすると、再び 1st が表示されListview
ます。再び戻って、アプリケーションを終了します。
このシナリオは、監査でも同じです。
このシナリオでは、 4 を使用しFragment's
ました。
xml ファイル
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
android:id="@+id/framelayout_fragment1_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.7">
</FrameLayout>
<fragment
android:id="@+id/detailFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.mobinius.fragments.DetailFragment"
android:layout_weight="0.3"
/>
チケットから監査へ、またはその逆に切り替えると、フリップ アニメーションが表示されます。
private void flipFragments(String tag) {
System.out.println(" tag in flipFragments : "+tag);
Fragment fragment = getFragmentManager().findFragmentByTag(tag);
System.out.println(" fragment in flipFragments : "+fragment);
if (fragment != null)
{
getFragmentManager().popBackStack(tag, FragmentManager.POP_BACK_STACK_INCLUSIVE);
return;
}
getFragmentManager()
.beginTransaction()
.setCustomAnimations(
R.animator.card_flip_right_in, R.animator.card_flip_right_out,
R.animator.card_flip_left_in, R.animator.card_flip_left_out)
.replace(R.id.framelayout_fragment1_container, new AuditGroupFragment(), tag)
.addToBackStack(tag)
.commit();
}
バックボタンを押すと、バックスタックからフラグメントを置き換えます
public void onBack(String tag) {
FragmentManager fragmentManager = getFragmentManager();
Fragment fragment = fragmentManager.findFragmentByTag(tag);
if(fragment != null)
fragmentManager.popBackStack(tag, FragmentManager.POP_BACK_STACK_INCLUSIVE);
else
finish();
}
リスト項目のいずれかをクリックすると、現在のフラグメントが必要なものに置き換えられます
public void onListItemClick(String tag, Fragment fragmentToAdd) {
getFragmentManager()
.beginTransaction()
.replace(R.id.framelayout_fragment1_container, fragmentToAdd, tag)
.addToBackStack(tag)
.commit();
}
チケット ナビゲーションでは、両方のフラグメントが完全に機能します。
問題 :
デフォルトでは、チケットフラグメントがアクティビティに追加されます。ここで、Audit に切り替えて 1 つのリスト項目を選択してから Ticket に切り替えると、読み込みに時間がかかり、再び Audit に切り替えると、2 番目の ListView が表示されません (バックスタックに保存されているはずです)。最初から読み込みます (最初の ListView を表示)。
では、まずこのアプローチは正しいのでしょうか。そうでない場合は、正しいアプローチを提案してください。