我正在开发一个带有嵌套片段的应用程序。在那里,我已经与一些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片段并单击后退时,此事件被触发但当我在文本字段中更改某些内容并单击后退按钮时,事件未触发... 请帮忙。
答案 0 :(得分:0)
嗨,你不需要覆盖回侦听器。只需覆盖onBackPressed()即可。