安卓应用中常见的按钮必须清除后栈

问题描述 投票:0回答:1

我的Android应用的布局分为顶栏(一 RelativeLayout)和另一 LinearLayout 在那里加载和更改碎片。这是一个概述。Overview

当应用程序启动时,第一个 主屏幕 显示,菜单零碎被加载到下层布局内。按3个按钮都会改变零碎,但顶栏始终不变,因为它停留在零碎外面。

  • 如果我按下按钮号 1 当其中一个片段(2, 3, 4)被加载后,菜单片段必须被显示,并且后堆栈必须被清除,所以如果我按后退按钮,应用程序就会关闭。

  • 如果我在查看片段2、3或4时按下后退按钮,我也必须回到菜单片段。

  • 如果在片段4中,我点击 去3 按钮,我将进入片段3。在这里,如果我按回车键,我必须转到片段4,但如果我点击按钮。1 我必须进入菜单,如果我按下后退键,应用程序就会关闭。

基本上,每次我进入菜单片段时,堆栈必须被清除,这是我不知道如何做的。

首先,我是这样改变片段的。

// Importing and stuff ...
public class Main extends FragmentActivity {

    private int CurrentFragment = 0;

    // onCreate
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // Among other things I set up the event for the Button 1
        Button1.setOnClickListener(
            new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (CurrentFragment != 0) showFragment(0);
            }
        }
    );
    }

    // This is what happens when pressing the back button
    @Override
    public void onBackPressed() {
        FragmentManager fm = getSupportFragmentManager();
        if (fm.getBackStackEntryCount() > 0 && CurrentFragment != 0) {
            fm.popBackStack();
            FragmentTransaction ft = fm.beginTransaction();
            Fragment CurrentFrag = fm.findFragmentById(R.layout.menu);
            if (CurrentFrag != null) ft.remove(CurrentFrag);
            ft.commit();
        } else {
            this.finish();
        }
    }

    // This method will show the specified fragment 
    public void showFragment(int fragment) {
        FragmentManager fm = getSupportFragmentManager();
        String ftag = "menu";
        Fragment fi;
        switch (fragment) {
            case 0:
                fi = Fragment1.newInstance();
                ftag = "menu";
            break;
            case 1:
                fi = Fragment2.newInstance();
                ftag = "frag2";
            break;
            case 2:
                fi = Fragment3.newInstance();
                ftag = "frag3";
            break;
            default:
                return;
        }
        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.fragmentContentLayout, fi);
        // If this is not the menu fragment add it to the back stack
        if (fragment != 0) ft.addToBackStack(ftag);
        ft.commit();
        CurrentFragment = fragment;
    }
}

在每个片段的类里面,我有这样的东西。

public class Fragment1 extends Fragment {
    public static Fragment newInstance() {
        Fragment1 NewFragment = new Fragment1();
        return NewFragment ;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View FragmentView = inflater.inflate(R.layout.menu, new RelativeLayout(Main.MainContext));
        FragmentView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
        return FragmentView;
    }
}
android stack fragment back
1个回答
0
投票

对我来说,最快的工作方式是这样做的。

   fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

在你的菜单片段的onActivityCreated()中插入这段代码 所以每次你去那里的时候,backstack就会被清空。

© www.soinside.com 2019 - 2024. All rights reserved.