大家好,今天在开发安卓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的时候,就不会重新进入程序了。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐