如何禁用从适配器到片段的后退按钮?

时间:2019-04-02 18:39:43

标签: android

请不要将其标记为重复项,因为过去的问题无法解决我的问题。

我已经尝试过

@Override
onBackPressed(){
//do nothing
}

但是它无法解决我的问题。

我对输出的期望是,如果用户按回,则他/她将无法执行此操作,因为禁用了按回,并且应该显示一个对话框。

这是我想出的,来自适配器:

public void onBackPressed() {
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);
            alertDialog.setTitle("Restart Progress");
            alertDialog.setMessage("Are you sure you want to restart all the progress?");

            alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                Intent intent = new Intent(context, NavDrawer.class);
                    context.startActivity(intent);
                }
            });

            alertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();

                }
            });

            AlertDialog alertDialog1 = alertDialog.create();
            alertDialog1.show();
}

在我的活动班级中,这是:

@Override
    public void onBackPressed() {
    weeklyExerciseAdapter2.onBackPressed();
        super.onBackPressed();
    }

2 个答案:

答案 0 :(得分:2)

在您的 activity 中覆盖如下的onBackPressed方法

@Override
public void onBackPressed(){
    if(fragmentManager.findFragmentByTag("YOUR_BACK_BTN_DISABLE_FRAG_TAG") instanceof MYFragment){
        //do nothing
    } else {
        super.onBackPressed() 
    }
}

答案 1 :(得分:1)

有种骇人听闻的解决方案,但您可以清除后栈。 如果您使用的是片段管理器,请在片段中尝试以下操作:

FragmentManager fm = getActivity().getSupportFragmentManager();
   for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {    
   fm.popBackStack();
}

fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

两者都应该起作用。

注意:这不会禁用“后退”按钮,用户根本无法进入上一个片段。