Fragment中addToBakcStack与activity的onKeyDown冲突

找到组织 发布于 2013/09/13 11:55
阅读 4K+
收藏 1

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

加载中
0
h
hvzhung
activity会先接受到事件,activity不消耗这个事件就会传递到fragment
找到组织
找到组织
怎么能不消除啊,请详细说明下
0
找到组织
找到组织
那怎么才能让他不消除啊,你能详细说说嘛。
0
xesam
xesam
先判断fragment是否显示(或者是否有效),没有就调用activity的
找到组织
找到组织
只要activity不重写onKeyDown方法就能完美回调,但是重写之后就不行了
0
找到组织
找到组织

只要activity不重写onKeyDown方法就能完美回调,但是重写之后就不行了

0
fneg
fneg
你处理后不要return true,可以return false,让按键事件继续传递
找到组织
找到组织
变成false之后还是不行啊,点了back直接只是走了back时间之后,没反应了,fragment没有反应
0
找到组织
找到组织

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没有任何处理,


0
kenping
kenping
@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();
}
0
找到组织
找到组织
getSupportFragmentManager().popBackStack()。
返回顶部
顶部