【发布时间】:2012-05-23 07:03:45
【问题描述】:
我有一个布局如下的活动
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<FrameLayout
android:id="@+id/frameLayoutA"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1" >
</FrameLayout>
<FrameLayout
android:id="@+id/frameLayoutB"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1" >
</FrameLayout>
</LinearLayout>
在活动的onCreate中,我在frameLayoutA中加载Fragment_A,在frameLayoutB中加载Fragment_B。
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
fmA=(FrameLayout) findViewById(R.id.frameLayoutA);
fmB=(FrameLayout) findViewById(R.id.frameLayoutB);
fragA=new FragmentA();
fragB=new FragmentB();
fragC=new FragmentC();
addFragmentsInActivity(R.id.frameLayoutA,fragA);
addFragmentsInActivity(R.id.frameLayoutB,fragB);
}
public void addFragmentsInActivity(int id, Fragment fragment)
{
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(id, fragment);
fragmentTransaction.commit();
}
使用菜单操作我想在 frameLayoutA 中加载 Fragment_B,在 frameLayoutB 中加载 Fragment_C。菜单操作是:
removeFragmentsInActivity(R.id.frameLayoutB,fragB);
addFragmentsInActivity(R.id.frameLayoutB,fragC);
if(!fragB.isAdded()){
Log.e("check", "fragB already removed from frameLayoutB");
removeFragmentsInActivity(R.id.frameLayoutB,fragB);
addFragmentsInActivity(R.id.frameLayoutA,fragB);
}
else{
Log.e("check", "fragB already added");
}
public void removeFragmentsInActivity(int id, Fragment fragment)
{
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(fragment);
fragmentTransaction.commit();
}
Fragment_B 不显示在 frameLayoutA 中。 frameLayoutA 显示 Fragment_A。再次单击菜单操作时,会加载 Fragment_B。
调试我发现 fragB.isAdded() 在 fragB.remove() 操作完成后返回 true。在第二个菜单操作期间,fragB.isAdded() 返回 false 并执行 fragB.add() 并且 FragmentB 显示在 frameLayoutA 中。
我知道提交是一个异步操作。 isAdded 返回 true,因为提交是异步的,并且删除操作提交直到调用 fragB.isAdded() 时才完成。是真的吗?
请提出解决问题的可能解决方案或方法。
问候, 维宝
【问题讨论】: