我开发了一个应用程序,因为我有一个片段事务,
MainActivity包含片段视图.
MainActivity在屏幕顶部有三个按钮,当我们将此活动转到另一个片段时,它们保持不变,当我们点击三个时,只有MainActivity片段部分发生变化.
但是,我的问题是当我将MainActivity从MainActivity转移到Fragment时,单击First-Button就可以了,但是当我点击Second-Button时,结果会将第一个Fragment的屏幕覆盖到另一个Fragment.
它在同一个Activity中,所以我不能通过删除片段(fr).commit();
因为如果我这样做,那么它变得不可点击可能是片段删除,所以没有响应点击下一个按钮.
总体结果,它显示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 Bundle savedInstanceState) { View r = inflater.inflate(R.layout.second_fratgment,false); return r; } }
但是当单击一个按钮片段按钮到另一个按钮时,它将显示第一个和第二个片段屏幕.
我用这个
fragmentTransaction.remove(fr).commit();
和这个
getFragmentManager().beginTransaction().remove(fr).commit();
但它不工作.
解决方法
在布局中声明的片段由Android处理不同.更换
<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"/>
使用FrameLayout或您选择的ViewGroup的子类,并以编程方式处理所有事务.其余的看起来对我好