Android后退按钮在片段中不工作
我是android新手,从我的活动中我被称为fragment_1,然后从fragment_1中我被称为fragment_2。这很好。当我按下fragment_2的后退按钮时,它不工作(我想返回fragment_1)Android后退按钮在片段中不工作,android,android-fragments,fragment,Android,Android Fragments,Fragment,我是android新手,从我的活动中我被称为fragment_1,然后从fragment_1中我被称为fragment_2。这很好。当我按下fragment_2的后退按钮时,它不工作(我想返回fragment_1) 你的碎片已经被添加到backback。但是你需要“弹出backbackback”一次,让Android设备显示你添加到其backbackback中的片段。 只需将这些代码行添加到活动的onBackPressed()中 主要活动: getSupportFragmentManager()
你的碎片已经被添加到backback。但是你需要“弹出backbackback”一次,让Android设备显示你添加到其backbackback中的片段。 只需将这些代码行添加到活动的onBackPressed()中 主要活动:
getSupportFragmentManager().beginTransaction()
.add(R.id.something,new Fragment1()).addToBackStack(null).commit();
来自碎片1:getActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.something,new Fragment2()).addToBackStack(null).commit();
这个代码对我来说很有用
@Override
public void onBackPressed(){
if (getSupportFragmentManager().getBackStackEntryCount() == 1){
finish();
}
else {
super.onBackPressed();
}
}
注意:-始终在事务中添加第一个片段,然后替换事务中的每个片段,为了返回到上一个片段,您必须将该片段添加到backstack,如下所示
FragmentTransaction fragTrans = fragmentManager.beginTransaction();
fragTrans.addToBackStack("DashboardFragment");
fragTrans.replace(contentFrameId, openDashBoard, "OpenDashboardFragment");
在主活动中反压
if (fragmentManager.getBackStackEntryCount() == 1) {
AlertExit();
} else {
int backStackId = fragmentManager.getBackStackEntryAt(i).getId();
fragmentManager.popBackStack(backStackId, FragmentManager.POP_BACK_STACK_INCLUSIVE);
如果您使用的是工具栏后退按钮,请确保片段中包含以下代码:
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//required for back button to work
setHasOptionsMenu(true);
}
并覆盖此功能:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.i(TAG,"Back Button Pressed");
switch (item.getItemId()) {
case android.R.id.home:
Log.i(TAG,"home on backpressed");
getActivity().onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
在我将AndroidManifext.xml中的代码添加到所讨论的活动中之后,这对我来说是有效的。嗯,这很奇怪。我有一个项目,我不这样做,但它仍然弹出回来。
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//required for back button to work
setHasOptionsMenu(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.i(TAG,"Back Button Pressed");
switch (item.getItemId()) {
case android.R.id.home:
Log.i(TAG,"home on backpressed");
getActivity().onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}