如何在Fragment中处理onBackPressed()?

时间:2016-08-09 13:13:22

标签: android android-fragments onbackpressed

这是我的班级名称

public class PrimaryFragment extends Fragment implements OnRestartRequest {

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

此行有误:super.onBackPressed();

我不知道片段类在后退按钮上的问题是什么。

4 个答案:

答案 0 :(得分:4)

onBackPressed()中没有Fragment方法。您可以执行类似getActivity().onBackPressed()中的Fragment调用。

答案 1 :(得分:3)

片段没有我们用于活动的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);

答案 2 :(得分:1)

您应该从内部调用getActivity()片段,如下所示:

getActivity().onBackedPressed();

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

答案 3 :(得分:0)

Fragmetns没有自己的OnBackPressed,你必须从包含该片段的父Actvitiy处理他们的交易。

示例://在Fragmetn上的父活动中

@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;
    }
}