为了账号安全,请及时绑定邮箱和手机立即绑定

Android片段手柄后退按钮按

Android片段手柄后退按钮按

慕桂英3389331 2019-06-25 16:31:56
Android片段手柄后退按钮按我的活动中有一些片段[1], [2], [3], [4], [5], [6]在Back Button Press中,如果当前活动片段为[2],则必须从[2]返回到[1],否则什么也不做。做这件事的最佳做法是什么?编辑:申请不得从[3][6]返回[2]。
查看完整描述

3 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

当您在片段之间转换时,请调用addToBackStack()作为你的一部分FragmentTransaction:

FragmentTransaction tx = fragmentManager.beginTransation();tx.replace( R.id.fragment, new MyFragment() ).addToBackStack( "tag" ).commit();

如果需要更详细的控件(例如,当某些片段可见时,您想要取消后退键),则可以设置OnKeyListener在片段的父视图上:

//You need to add the following line for this solution to work; thanks skayredfragment.getView().setFocusableInTouchMode(true);fragment.getView().requestFocus();fragment.getView().setOnKeyListener( new OnKeyListener(){
    @Override
    public boolean onKey( View v, int keyCode, KeyEvent event )
    {
        if( keyCode == KeyEvent.KEYCODE_BACK )
        {
            return true;
        }
        return false;
    }} );


查看完整回答
反对 回复 2019-06-25
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

我宁愿这样做:

private final static String TAG_FRAGMENT = "TAG_FRAGMENT";private void showFragment() {
    final Myfragment fragment = new MyFragment();
    final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment, fragment, TAG_FRAGMENT);
    transaction.addToBackStack(null);
    transaction.commit();}@Overridepublic void onBackPressed() {
    final Myfragment fragment = (Myfragment) getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT);

    if (fragment.allowBackPressed()) { // and then you define a method allowBackPressed with the logic to allow back pressed or not
        super.onBackPressed();
    }}


查看完整回答
反对 回复 2019-06-25
?
手掌心

TA贡献1942条经验 获得超3个赞

如果您覆盖了片段视图的Onkey方法,则需要:

    view.setFocusableInTouchMode(true);
    view.requestFocus();
    view.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                Log.i(tag, "keyCode: " + keyCode);
                if( keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
                    Log.i(tag, "onKey Back listener is working!!!");
                    getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
                    return true;
                } 
                return false;
            }
        });


查看完整回答
反对 回复 2019-06-25
  • 3 回答
  • 0 关注
  • 444 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号