安卓 从第二个Fragment返回到第一个Fragment,再从第一个Fragment返回到手机主界面,两个不同Fragment的返回键处理
当我从第一个MainFragment调用toFragment(Fragment xxxxx)方法跳转到第二个Fragment时,再点击返回键按钮,也是直接给我返回到主界面了,这时就不友好了,我当然是希望在第二个Fragment点击返回按钮的时候,是返回到第一个MainFragment,而不是也触发了MainActivity的键盘监听按钮,那怎么办了?
大家好,今天在开发安卓APP的时候,遇见一个问题,我是做了一个MainActivity里包含了一个主的MainFragment,然后MainFragment里包含很多按钮,然后点击不同的按钮,他会跳转到不同的Fragment里,实现方法如下:
private void toFragment(Fragment fragment) {
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fl_layout,fragment).addToBackStack(null).commit();
}
我是通过replace来替换fragment的,当我不在第一个MainFragment的时候,我希望点击返回键是返回上一个Fragment,这个不用做任何处理,就能实现,但是,当我返回到第一个MainFragment这里的时候,我再点返回键,我是希望他不退出程序,而是像点击主界面按钮一样,返回到手机主界面,于是我加了一下代码
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent home = new Intent(Intent.ACTION_MAIN);
home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
home.addCategory(Intent.CATEGORY_HOME);
startActivity(home);
return true;
}
return super.onKeyDown(keyCode, event);
}
实则看起来没什么问题,确实是直接就跳到主界面,并没有退出程序,但是我发现一个问题就是,当我从第一个MainFragment调用toFragment(Fragment xxxxx)方法跳转到第二个Fragment时,再点击返回键按钮,也是直接给我返回到主界面了,这时就不友好了,我当然是希望在第二个Fragment点击返回按钮的时候,是返回到第一个MainFragment,而不是也触发了MainActivity的键盘监听按钮,那怎么办了?
于是就有了以下代码:
@Override
public void onBackPressed() {
if(getSupportFragmentManager().getBackStackEntryCount()==0){
Intent home = new Intent(Intent.ACTION_MAIN);
home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
home.addCategory(Intent.CATEGORY_HOME);
startActivity(home);
}else{
getSupportFragmentManager().popBackStack();
}
}
该方法的getSupportFragmentManager().getBackStackEntryCount()是用来判断是否还有Fragment在back stack中,如果存在,则还原上一个Fragment,就是MainFragment这个,如果不存在,也就表示当前就在主界面,直接返回到手机主界面就行了,然后在后台再进入APP的时候,就不会重新进入程序了。
更多推荐
所有评论(0)