奇怪的碎片行为

时间:2014-07-17 18:50:12

标签: android android-fragments

我在我的onResume()活动方法中有以下代码:

mFragmentManager.popBackStack(FragmentNames.FRAG_MY_CLASS, FragmentManager.POP_BACK_STACK_INCLUSIVE);
FragmentTransaction fragTransaction = mFragmentManager.beginTransaction();
fragTransaction.add(R.screenHome.content, MyClass.newInstance(), FragmentNames.FRAG_MY_CLASS);
fragTransaction.commit();

按预期工作。我期望的行为是在添加它之前从后台堆栈中弹出指定的片段。我这样做是因为我想每次重新创建片段视图,当我从之前的活动中或从下一个活动中按回来时。 但我不明白它为什么会起作用,如果我在提交之前没有这样做,则弹出指定的片段:

fragTransaction.addToBackStack(FragmentNames.FRAG_MY_CLASS);

任何人都可以知道它的工作原理吗?奇怪的是,我也用我用来添加指定片段的标签名称调用popBackStack。

2 个答案:

答案 0 :(得分:1)

虽然没有直接回答你的问题,但你表示你这样做是因为

  

我想每次都重新创建片段视图

这是一种错误的方法。您应该在其onResume()中重新创建片段的视图 - 无需为此进行背景触摸,尤其是在此时

  

我从之前的活动

开始

非常适合。

答案 1 :(得分:1)

您可以继续在方法onCreate ()中创建片段,片段控制应根据连接状态显示的视图

public class FragmentA extends Fragment {

    boolean      flagNetwork;
    LinearLayout myContent;

    LinearLayout networkError;

    @Override
    public View onCreateView( final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState ) {

        final View view = inflater.inflate( R.layout.fragment_main, null );

        this.myContent = ( LinearLayout ) view.findViewById( R.id.content );
        this.networkError = ( LinearLayout ) view.findViewById( R.id.network_unvailable );

        if ( this.flagNetwork ) {
            this.myContent.setVisibility( View.VISIBLE );
        } else {
            this.networkError.setVisibility( View.VISIBLE );
        }

        return view;
    }
}

//布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:visibility="gone" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/network_unvailable"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:visibility="gone" >

        <!-- your hadler to error -->

    </LinearLayout>

</RelativeLayout>