2 jason white Jason_White 于 2015.06.28 13:46 提问

FragmentTransaction.remove()没有去除掉相应的Fragment

最近在练习Fragment的使用,但是在后台使用transaction.remove(fragment);后,界面上仍然能看的到相应的fragment,并没有移除这个fragment。
请问在使用FragmentTransaction的时候,在界面布局和后台管理上应该注意什么?
我为什么没有实现想要的移除动作。

3个回答

ljcmeng
ljcmeng   2015.06.28 14:02
已采纳

LZ你transaction.remove之后进行了commit操作么?估计是没进行着项操作导致的

Jason_White
Jason_White 真的的确是要在Activity中添加进去才可以,而不能静态的写在界面上。
2 年多之前 回复
zcc1052015295
zcc1052015295 不清楚这个
2 年多之前 回复
ljcmeng
ljcmeng 回复Jason_White: LZ,按照你的代码我猜测你的XML布局文件里面直接用的是一个Fragment,你这种可以理解成静态布局了一个frament,你做如下修改:在布局文件里面把fragment替换成一个FrameLayout,然后在onCreate里面先加入第一个fragment,然后在onclick的时候调用remove就可以移除了。(我猜测你是想要跳到第二个fragment,直接用replace也行,因为replace内部先是做了remove操作,然后再add)
2 年多之前 回复
Jason_White
Jason_White 我把Activity中的代码贴了出来,请你帮忙看一下有什么问题
2 年多之前 回复
Jason_White
Jason_White 我把Activity中的代码贴了出来,请你帮忙看一下有什么问题。
2 年多之前 回复
xiaoweiguoyuan
xiaoweiguoyuan   2015.07.16 16:37

http://www.allfordev.com/question/3

这里有个很好的解决方案

Jason_White
Jason_White   2015.06.28 14:04
 package com.yitoujr;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

import com.yitoujr.widget.ForgetPSD1Fragment;
import com.yitoujr.widget.ForgetPSD2Fragment;

public class ForgetPsdActivity extends Activity {

    private FragmentManager fManager;
    private ForgetPSD1Fragment psd1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.forgetpsd);

        fManager = getFragmentManager();
        psd1=(ForgetPSD1Fragment) fManager.findFragmentById(R.id.forgetpsd1);
        Button btnNext = (Button) findViewById(R.id.next);
        btnNext.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                FragmentTransaction transaction = fManager.beginTransaction();
                ForgetPSD2Fragment fragment=new ForgetPSD2Fragment();
                //transaction.replace(R.id.forgetpsd1, fragment);
                transaction.remove(psd1);
                //transaction.addToBackStack(null);
                transaction.commit();
            }
        });
    }
}

上边是相应的后台代码,请各位帮忙查看一下。

Csdn user default icon
上传中...
上传图片
插入图片