说明:前阵子使用到fragment时又疑惑,后来找资料理解,终于解决了问题,但是后来又碰到fragment,又有一样的问题出现,时间太长了,记不住,这次受教训了,老老实实,踏踏实实地做好笔记吧。
fragment在跳转后,上一个fragment,仍然在界面中,2个fragment就交替,相互干扰了。
解决:在main.xml中,要事先给fragment一个空间,我用的是,相关的配置属性:
FrameLayout
android:layout_height="120dp"
android:layout_width="match_parent"
android:layout_weight="1"
android:id="@+id/MainFramelayout"<!-id为后面跳转id参数->
id是自定义的。
然后在MainActivity的oncreate函数中,写入
public class Main extends Activity{
private FragmentManager manager;
private FragmentTransaction ft;
@TargetApi(Build.VERSION_CODES.HONEYCOMB) @SuppressLint("NewApi") @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);//设置好main布局
manager=getFragmentManager();
ft=manager.beginTransaction();
Fragment1 f1=new Fragment1();//想要显示的fragment界面确定
ft.replace(R.id.MainFramelayout, f1);//执行切换显示。 android:id="@+id/MainFramelayout"<!-id为此id参数->
ft.commit();//提交
其中R.id.MainFramelayout就是我们事先设定好的空间,Fragment1 f1为我们想要跳转到的fragment。
然后在点击事件中在设置
FragmentManager manager;
FragmentTransaction ft;
manager=getFragmentManager();
ft=manager.beginTransaction();
Fragment f=new Fragment1();
if(f1!=null){
ft.remove(f1);//此时f1肯定是存在的,如果这里不做处理,那么f和f1的界面将会重合显示,所以需要移除已经显示的f1,这里的处理非常精彩。
ft.replace(R.id.MainFramelayout, f);
ft.commit();
}
这个思路是:为fragment设置空间,在替换时,一定是空间和fragment之间替换,而不是fragment之间的替换。