多片段问题

时间:2013-07-23 09:59:36

标签: android android-fragments fragment

请看下面的图片

enter image description here

在左侧面板中有两个名为Ticket和Audit的类别,每个类别都有一个后退按钮。 门票有2 ListView's。如果我点击第一个Listview中的任何项目,它将会打开第二个Listview。 与此同时,如果我再次点击,我将再次看到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();        
}

当我按下后退按钮时,从后面的堆栈中替换片段

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 naivigation,这两个片段都能很好地工作。

问题:

默认情况下,Ticket Fragment将添加到Activity。现在,如果我切换到Audit,选择1列表项,然后切换到Ticket,它需要一些时间加载,当我再次切换回Audit时,我看不到第二个ListView(它应该存储在后台堆栈中)。它从开始加载(显示第一个ListView)。

那么,首先这种方法是否正确?如果没有,请建议正确的方法。

1 个答案:

答案 0 :(得分:0)

终于找到了我的问题的解决方案。对于同一here,有一个很好的示例示例。此外,还讨论了here