Android KEYCODE_BACK不会在片段中被激发

Android KEYCODE_BACK不会在片段中被激发,android,android-fragments,Android,Android Fragments,我正在开发一个带有嵌套片段的应用程序。在这个应用程序中,我有一些带有edittext字段的ContactUsFragment和submit按钮。 当用户不更改任何字段并单击“上一步”时,没有任何特殊情况发生。但当用户输入一些数据并按下“上一步”按钮而不提交数据时,会弹出一个警告,向用户显示警告。如果用户单击“确定”,则应返回 为此,我想覆盖片段中的后退按钮功能。 所以我做了这个 public class ContactUs extends Fragment implements OnClick

我正在开发一个带有嵌套片段的应用程序。在这个应用程序中,我有一些带有edittext字段的ContactUsFragment和submit按钮。 当用户不更改任何字段并单击“上一步”时,没有任何特殊情况发生。但当用户输入一些数据并按下“上一步”按钮而不提交数据时,会弹出一个警告,向用户显示警告。如果用户单击“确定”,则应返回

为此,我想覆盖片段中的后退按钮功能。 所以我做了这个

 public class ContactUs extends Fragment implements OnClickListener {
EditText txtname, txtEmail, txtPhone, txtDescription;
Button btnSend;
DatabaseConnection myDB;
View view = null;
int j = 0;
static boolean changed=false;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    view            = inflater.inflate(R.layout.contact_us, container, false);
    btnSend         = (Button) view.findViewById(R.id.btnSend);
    txtname         = (EditText) view.findViewById(R.id.txtName);
    txtEmail        = (EditText) view.findViewById(R.id.txtEmail);
    txtPhone        = (EditText) view.findViewById(R.id.txtPhone);
    txtDescription  = (EditText) view.findViewById(R.id.txtDescription);
    btnSend.setOnClickListener(this);
    myDB=new DatabaseConnection(getActivity());




    Toast.makeText(getActivity(), "oncreate view", 2000).show();

    view.setFocusableInTouchMode(true);
    view.requestFocus();
    view.setOnKeyListener(new onBackListener());

    }
这是我的在线听众

    private class onBackListener implements OnKeyListener{



    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {



        switch (keyCode) {
        case KeyEvent.KEYCODE_BACK:

            if (event.getAction() == KeyEvent.ACTION_DOWN)
            {
                if (changed==true) {



                    AlertDialog.Builder alert=new        AlertDialog.Builder(getActivity());
                    alert.setTitle("Delete entry")
                    .setMessage("Are you sure you want to Navigate?")
                    .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) { 
                            dialog.dismiss();
                            changed=false;
                            getActivity().onBackPressed();
                        }
                    });

                    alert.show();


                }else {
                    Toast.makeText(getActivity(), "back", 2000).show();
                    getActivity().onBackPressed();
                }
            }


            return true;

        }
        return onKey(v,keyCode,event);

    }
这里的changed是一个布尔值,当字段中的文本发生变化时,该值会发生变化(为此实现了textwatcher)。如果用户再次按下submit按钮,该值将变为false

一切正常。当我打开contactus fragment并单击“上一步”时,会触发此事件,但当我在文本字段中更改某些内容并单击“上一步”按钮时,事件不会触发。。。
请提供帮助。

您好,您无需覆盖后台侦听器。只需重写onBackPressed()。

我们如何在片段中重写onBackPressed()?是的,你是对的。这是不可能的。返回键将在控制视图中触发。我指的是零碎的活动。从那里你可以访问你的所有片段。为此,您可能必须声明片段中声明的每个变量都应该是静态变量