【发布时间】:2015-06-29 14:17:57
【问题描述】:
我开发了一个应用程序,其中我有一个片段交易,
MainActivity 包含Fragment View。
MainActivity 在屏幕顶部有三个Button,当我们将这个Activity 转到另一个Fragment 时,它们保持不变,只有MainActivity Fragment 当我们点击三个中的一部分时会发生变化。
但是,我的问题是,当我从这个MainActivity 移动到Fragment 时,点击First-Button 没问题,但是当我点击Second-Button 时,结果是用第一个@987654333 覆盖屏幕@给另一个Fragment。
它在同一个Activity 所以,我不能通过remove(fr).commit(); 删除Fragment
因为如果我这样做,那么它变得不可点击可能会被片段删除,因此在点击下一个按钮时不会响应。
总体结果,它同时显示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();
但它不起作用。
【问题讨论】:
-
请发布您的 NewFragment 课程
-
当然,请参阅编辑后的问题
-
你不能有一个嵌入的片段(一个在 xml 布局中声明的片段标签),你可以使用它进行交易(如替换)。因此,而不是那个片段标签,而是放置一个简单的 FrameLayout 并在活动的 onCreate() 方法中手动添加片段。
-
@Luksprog :谢谢伙计...你太棒了... :) 这个技巧奏效了... ty ty .....
-
ya @Luksprog 现在它的工作就像魅力... ty...