我开发了一个应用程序,在其中我有一个片段事务。
MainActivity
包含 Fragment View
。
MainActivity
在屏幕顶部有三个 Button
,当我们从这个 Activity
移动到另一个 Fragment
时,这三个按钮保持不变,只有 MainActivity
的 Fragment
部分在我们点击其中之一后才会改变。
但是,我的问题是当我从这个 MainActivity
移动到 Fragment
时,如果我点击第一个按钮那就没问题,但是当我点击第二个按钮时,结果会用第一个 Fragment
覆盖屏幕,跳转到下一个 Fragment
。
因为它们在同一个 Activity
中,所以我不能通过 remove(fr).commit();
来删除 Fragment
。
因为如果我这样做,它可能会使这个片段无法点击,也许片段被删除了,所以下一个按钮的点击将没有响应。
总体结果是,在我移动到 NewFragment
时,它显示了两个屏幕,即 FirstFragment
和 NewFragment
屏幕。那我如何在移动到 NewFragment
时删除 FirstFragment
屏幕?
MainActivity
中的三个按钮有以下代码来更改片段:
主要活动:
public class MasterActivity extends Activity {
ImageView imgOne, imgTwo, imgThree;
Fragment fr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_master);
imgOne = (ImageView) findViewById(R.id.imgOne);
imgTwo = (ImageView) findViewById(R.id.imgTwo);
imgThree = (ImageView) findViewById(R.id.imgThree);
imgOne.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
fr = new FirstFragment();
FragmentManager fm = getFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.replace(R.id.fragment_place, fr);
fragmentTransaction.addToBackStack(null);
//fragmentTransaction.remove(fr).commit();
//getFragmentManager().beginTransaction().remove(fr).commit();
fragmentTransaction.commit();
}
});
imgTwo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
fr = new SecondFragment();
FragmentManager fm = getFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.replace(R.id.fragment_place, fr);
fragmentTransaction.addToBackStack(null);
//fragmentTransaction.remove(fr).commit();
// getFragmentManager().beginTransaction().remove(fr).commit();
fragmentTransaction.commit();
}
});
以下是它的 XML 文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#000000"
android:gravity="bottom"
android:weightSum="3" >
<ImageView
android:id="@+id/imgOne"
android:layout_width="0dp"
android:layout_height="27dp"
android:layout_gravity="center"
android:layout_weight="1"
android:src="@drawable/img1" />
<ImageView
android:id="@+id/imgTwo"
android:layout_width="0dp"
android:layout_gravity="center"
android:layout_height="27dp"
android:layout_weight="1"
android:src="@drawable/img2"/>
<ImageView
android:id="@+id/imgThree"
android:layout_width="0dp"
android:layout_gravity="center"
android:layout_height="27dp"
android:layout_weight="1"
android:src="@drawable/img3" />
</LinearLayout>
<fragment
android:id="@+id/fragment_place"
android:name="packagename.FirstFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.87"/>
<LinearLayout/>
<LinearLayout/>
第一个片段:
public class FirstFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View r = inflater.inflate(R.layout.first_fratgment, container, false);
return r;
}
}
第二个碎片:
public class SecondFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View r = inflater.inflate(R.layout.second_fratgment, container, false);
return r;
}
}
但当点击一个名为Fragment
的按钮时,它会显示第一个和第二个Fragment
屏幕。
那么如何解决这个问题并在第二次点击时移除第一个视图?
我使用了这个:
fragmentTransaction.remove(fr).commit();
并且这个
getFragmentManager().beginTransaction().remove(fr).commit();
但它并没有起作用。