Android 通过按压背部,碎片相互重叠

Android 通过按压背部,碎片相互重叠,android,Android,我有一个按钮和框架: public class MyActivity extends Activity implements View.OnClickListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Butt

我有一个按钮和框架:

public class MyActivity extends Activity implements View.OnClickListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button replaceBtn = (Button) findViewById(R.id.replaceFragment);
        replaceBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.replaceFragment:
                Fragment fragment1 = new Frag1();
                FragmentTransaction fTrans = getFragmentManager().beginTransaction();
                fTrans.replace(R.id.contentFrame, fragment1);
                **fTrans.addToBackStack(null);**
                fTrans.commit();
                break;
        }
    }
}
按下按钮等。我创建一个片段:

public class Frag1 extends Fragment  implements View.OnClickListener {
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.frag1, null);
        Button replaceBtn2 = (Button) v.findViewById(R.id.replaceFragment2);
        replaceBtn2.setOnClickListener(this);
        return v;
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.replaceFragment2:
                Frag2 fragment2 = new Frag2();
                FragmentTransaction fTrans = getFragmentManager().beginTransaction();
                fTrans.replace(R.id.contentFrame,fragment2);
                **fTrans.addToBackStack(null);**
                fTrans.commit();
                break;
        }
    }
}
它还有一个按钮,按下该按钮时,我会创建碎片2:

public class Frag2 extends Fragment implements View.OnClickListener {
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.frag2, null);
        Button replaceBtn3 = (Button) v.findViewById(R.id.replaceFragment3);
        replaceBtn3.setOnClickListener(this);
        return v;
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.replaceFragment3:
                Frag3 fragment3 = new Frag3();
                FragmentTransaction fTrans = getFragmentManager().beginTransaction();
                fTrans.replace(R.id.contentFrame,fragment3);
                **//do not add backstack**
                fTrans.commit();
                break;
        }
    }
}
fragment2还创建了一个新的fragment3:

public class Frag3 extends Fragment{
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.frag3, null);
        return v;
    }
}
然后稍后当我按下屏幕上的“后退”按钮时,碎片将以相反的顺序出现。但我想当我在支离破碎的时候,当你按下back键的时候立刻出现支离破碎。
这是因为您没有将碎片2添加到backstack。当碎片从backback中排除时,碎片不会弹出或消失。Backback的运行方式与activity back stack或任何其他堆栈容器的工作方式完全相同

为了更好地解释:

将第一个片段添加到堆栈中

[stack]显示topElement Fragment1

添加了第二个元素,但未添加到堆栈[stack]topElement 碎片1没有显示

将第三个片段添加到堆栈[stack]topElement Fragment3is 显示 现在,如果你弹出,它将按以下顺序返回:第3、第1和其他

编辑

在这种情况下,您可以像这样简单地覆盖onBackPressed以实现您想要的行为:

背压{

//默认背压行为 ifmFragmentManager.GetBackBackbackEntryCount==0//如果希望关闭,可以将其设置为==1 完成

MFFragmentManager.popBackStackImmediatenull、FragmentManager.POP_BACK_STACK_包括在内


}

我就知道。我意识到问题了吗?我需要在片段3上点击后退我进入片段1你能准确地告诉我你想要什么样的顺序吗?打开:1,2,3关闭:3,2,1?碎片1-入口点。在其中我可以创建fragment2,在fragmente2中可以创建fragment3,依此类推。但是,当我点击后退按钮时,我必须在片段中退出1.打开1,2,3,4,5…n关闭1.你的意思是打开1,2,3,4,5..n关闭:仅第一?或者你的意思是按你打开的顺序关闭?我加载了碎片1。用它我可以打开其他碎片。可能有很多。以不同的顺序。但另一个提议。当我点击“后退”按钮时,我希望总是得到碎片。尽管在他身后发现了许多碎片。