【问题标题】:How do handle onBackPressed() in Fragment? [duplicate]如何处理 Fragment 中的 onBackPressed()? [复制]
【发布时间】:2016-12-15 13:30:18
【问题描述】:

这是我的班级名称

public class PrimaryFragment extends Fragment implements OnRestartRequest {

    @Override
    public void onBackPressed() {
        if (mCardStackLayout.isCardSelected()) {
            mCardStackLayout.restoreCards();
        } else {
            super.onBackPressed();
        }
    }

此行出错:super.onBackPressed();

我不知道片段类的后按按钮有什么问题。

【问题讨论】:

标签: android android-fragments onbackpressed


【解决方案1】:

Fragment 中没有 onBackPressed() 方法。你可以做一些事情,比如从你的Fragment 调用getActivity().onBackPressed()

【讨论】:

    【解决方案2】:

    片段没有 onBackPress() 方法,因为我们有活动。我更喜欢使用下面的代码来处理背压,希望它对你有所帮助:

     private void handleBackPress(View view) {
    
    
            view.setFocusableInTouchMode(true);
            view.requestFocus();
            view.setOnKeyListener( new View.OnKeyListener()
            {
                @Override
                public boolean onKey( View v, int keyCode, KeyEvent event )
                {
                    if( keyCode == KeyEvent.KEYCODE_BACK )
                    {
    
                        cancelCountDownTimerAndSaveValues();
    
                        if (Constants.Fragments.CurrentFragment != null)
                        {
                             getActivity().getSupportFragmentManager().popBackStack();
    
                        }
    
                        return true;
                    }
                    return false;
                }
            } );
        }
    

    这里的视图是您从

    获得的片段的主要视图

    View view = inflater.inflate(R.layout.xxxxx, container, false);

    【讨论】:

      【解决方案3】:

      你应该像这样从片段内部调用getActivity()

      getActivity().onBackedPressed();
      

      注意:注意你导入正确的getActivity(),如果你使用android.support.v4.app.Fragment你需要导入正确的包。

      【讨论】:

        【解决方案4】:

        Fragmetns 没有自己的OnBackPressed,您必须从包含该片段的父 Actvitiy 处理他们的事务。

        示例://在 Fragmetn 上的父 Activity 中

        @Override
        public void onBackPressed() {
            // This will get you total fragment in the backStack
            int count = getFragmentManager().getBackStackEntryCount();
            switch(count){
                case 0:
                    super.onBackPressed();
                    break;
                case 1:
                    // handle back press of fragment one
                    break;
                case 2:
                    // and so on for fragment 2 etc
                    break;
                default:
                    getFragmentManager().popBackStack();
                    break;
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多