csh_34
csh_34
采纳率80.4%
2012-10-31 02:48

最后一个fragment出现时处理返回键的问题

已采纳

基于用户的交互,我将Fragments动态的添加到activity中 。当按下返回键, Fragment片段会出现。然而当我按下第一个加载到堆栈中的Fragment中的返回键时,Activity会显示了一个空的布局。我想让这个Activity调用finish()方法然后消失。我试着使用以下代码:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    super.onKeyDown(keyCode, event);
    if(keyCode == KeyEvent.KEYCODE_BACK){
        if(getFragmentManager().getBackStackEntryCount()==0){
            finish();
            return true;
        }
    }
    return true;
}

但是这样的话会影响返回键的功能。请求大家给与指点,谢谢!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

5条回答

  • O_Casper_ne O_Casper_ne 9年前
    1. 把第二个return true;改为return false;这样表明你没有处理键盘响应,当返回栈是空的时候,activity就会关闭。
    2. getBackStackEntryCount()==0改为getBackStackEntryCount()==1
    点赞 2 评论 复制链接分享
  • llwdslal 若谷 8年前

    第一个添加的Fragment也就是按返回键时的最后一个Fragment
    在添加到Activity的时候 不要调用 FT(事物)的添加到Back堆栈方法就好了。

    点赞 2 评论 复制链接分享
  • znl_12 znl_12 9年前

    你在哪里添加你的第一个fragment?不要把这个事务添加到你想要实现功能的返回栈中。

    点赞 1 评论 复制链接分享
  • baidu_34834776 baidu_34834776 5年前

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    super.onKeyDown(keyCode, event);
    if(keyCode == KeyEvent.KEYCODE_BACK){
    if(manager.getBackStackEntryCount()==1){
    this.finish();
    return true;
    }
    }
    return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    
        int id = item.getItemId();
    
    
        if (id == R.id.action_settings) {
    
            return true;
        }
        if (id == android.R.id.home){
    
            onBackPressed();
            return true;
        }
    
        return super.onOptionsItemSelected(item);
    
    }
    
    @Override
    public void onBackPressed() {
        if(manager.getBackStackEntryCount()==1){
            this.finish();
    
        }
        super.onBackPressed();
    }
        我的是这样解决的 ,因为我有toolbar的返回按钮所以处理了两个事件,这样功能却是实现了 不会出现空白页了 ,不过点击返回的时候,仔细看销毁的是返回的那个fragment,只不过他把显示的界面覆盖了一起被销毁了
    
    点赞 1 评论 复制链接分享
  • ycyz311 ycyz311 6年前
    bt_gohome.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // 获取fragment回退栈的节点数量
                while (manager.getBackStackEntryCount() != 0) {
                    activity.onBackPressed();
                    activity.finish();
                }
            }
        });
    
    
    

    新手,不知道对否

    点赞 评论 复制链接分享

相关推荐