我的Android应用的布局分为顶栏(一 RelativeLayout
)和另一 LinearLayout
在那里加载和更改碎片。这是一个概述。
当应用程序启动时,第一个 主屏幕 显示,菜单零碎被加载到下层布局内。按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;
}
}
对我来说,最快的工作方式是这样做的。
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
在你的菜单片段的onActivityCreated()中插入这段代码 所以每次你去那里的时候,backstack就会被清空。