在Fragment中没有触发KEYCODE_BACK

时间:2014-05-20 06:55:04

标签: android android-fragments

我正在开发一个带有嵌套片段的应用程序。在那里,我已经与一些edittext字段和提交按钮联系。 当用户没有更改任何字段并单击后面没有任何特殊情况发生时,一切都会正常。但是当他输入一些数据并按下后退按钮而不提交时,则会弹出一个警告,向用户显示警告。如果他点击了OK然后他应该回头。

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

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

    }

这是我的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);

    }

此处已更改是一个布尔值,当文本在字段中更改时会更改(为此实现textwatcher)。如果用户再次按下提交按钮,则此值将更改为false。

一切都很好。当我打开contactus片段并单击后退时,此事件被触发但当我在文本字段中更改某些内容并单击后退按钮时,事件未触发... 请帮忙。

1 个答案:

答案 0 :(得分:0)

嗨,你不需要覆盖回侦听器。只需覆盖onBackPressed()即可。