我在我的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。
答案 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>