8
回答
Fragment中addToBakcStack与activity的onKeyDown冲突
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

现在实现一个点击back按钮实现回退fragment,但是宿主activity的onKeyBack事件与addToBackStack冲突,请问大家都是怎么处理的,纠结啊。

举报
找到组织
发帖于4年前 8回/3K+阅
共有8个答案 最后回答: 4年前
先判断fragment是否显示(或者是否有效),没有就调用activity的
--- 共有 1 条评论 ---
找到组织只要activity不重写onKeyDown方法就能完美回调,但是重写之后就不行了 4年前 回复
你处理后不要return true,可以return false,让按键事件继续传递
--- 共有 1 条评论 ---
找到组织变成false之后还是不行啊,点了back直接只是走了back时间之后,没反应了,fragment没有反应 4年前 回复

public boolean onKeyDown(int keyCode, KeyEvent event) {

if(KeyEvent.KEYCODE_BACK== keyCode) {

System.out.println("KeyBack");

return false;

}

return super.onKeyDown(keyCode, event);

}

FragmentTransaction ft= getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.my_fragment, new Fragment2());

ft.addToBackStack("com.example.fragmentbackstack.Fragment1");

ft.commit();

fragment没有任何处理,


@Override
public void onBackPressed()
{
    FragmentManager fmgr = getSupportFragmentManager();
    
    // 看看有没有Fragment需要消费back
    Fragment frag = fmgr.findFragmentByTag(MyFragment.FRAG_TAG);
    if (null!=frag && frag instanceof MyFragment && ((MyFragment) frag).onBackClicked())
    {
        // 已经有Fragment消费了back,那么就不再传递
        return;
    }

    // back栈里面没有内容,本窗口是否需要消费back?
    if (fmgr.getBackStackEntryCount()==0 && this.onBackClicked())
    {
        // 当前窗口消费了back,那么就不再传递
        return;
    }

    // back栈里面有内容或本窗口没有消费,则由基类的Activity去决定交给谁
    super.onBackPressed();
}
顶部