请看下面的图片
在左侧面板中有 2 个类别,名为 Ticket 和 Audit,每个类别都有一个后退按钮。票有 2 ListView'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"
/>
当我在 Ticket 和 Audit 之间切换时,会有一个翻转动画,反之亦然。
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();
}
当我按下后退按钮时,从后堆栈替换 Fragment
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();
}
对于票务导航,两个片段都可以完美运行。
问题 :
默认情况下,Ticket Fragment 将被添加到 Activity。现在,如果我切换到 Audit,选择 1 个列表项,然后切换到 Ticket,加载需要一些时间,当我再次切换回 Audit 时,我看不到第二个 ListView(它应该存储在后堆栈中)。它从一开始就加载(显示第一个 ListView)。
那么,首先,这种方法是否正确?如果不是,请提出正确的方法。