如何在Fragment中处理onBackPressed()方法?

3

这是我的班级名称

public class PrimaryFragment extends Fragment implements OnRestartRequest {

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

该行错误: super.onBackPressed();

我不知道在片段类的返回按键中有什么问题。


1
请查看此帖子- https://dev59.com/1m035IYBdhLWcg3wYfAF?rq=1 - Harish Gyanani
1
请仔细阅读http://stackoverflow.com/help/how-to-ask。 - UeliDeSchwert
阅读错误信息会对你有所帮助。 :) - Sufian
你好,我的答案在这里。 希望能有所帮助。 - Maxime Jallu
4个回答

6

Fragment没有onBackPressed()方法。你可以在Fragment中调用getActivity().onBackPressed()来实现相同的功能。


3

片段(Fragment)没有像活动(Activity)那样的onBackPressed()方法。我建议使用以下代码来处理返回操作,希望能对你有所帮助:

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

在这里,视图是您从inflater.inflate(R.layout.xxxxx, container, false)获取的片段的主视图。

1
您应该像这样从片段内调用getActivity():
getActivity().onBackedPressed();

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

0

片段没有自己的OnBackPressed,您必须从包含该片段的父活动中处理它们的事务。

例如://在父活动上的片段

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接