Android KEYCODE_BACK不会在片段中被激发
我正在开发一个带有嵌套片段的应用程序。在这个应用程序中,我有一些带有edittext字段的ContactUsFragment和submit按钮。 当用户不更改任何字段并单击“上一步”时,没有任何特殊情况发生。但当用户输入一些数据并按下“上一步”按钮而不提交数据时,会弹出一个警告,向用户显示警告。如果用户单击“确定”,则应返回 为此,我想覆盖片段中的后退按钮功能。 所以我做了这个Android KEYCODE_BACK不会在片段中被激发,android,android-fragments,Android,Android Fragments,我正在开发一个带有嵌套片段的应用程序。在这个应用程序中,我有一些带有edittext字段的ContactUsFragment和submit按钮。 当用户不更改任何字段并单击“上一步”时,没有任何特殊情况发生。但当用户输入一些数据并按下“上一步”按钮而不提交数据时,会弹出一个警告,向用户显示警告。如果用户单击“确定”,则应返回 为此,我想覆盖片段中的后退按钮功能。 所以我做了这个 public class ContactUs extends Fragment implements OnClick
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()?是的,你是对的。这是不可能的。返回键将在控制视图中触发。我指的是零碎的活动。从那里你可以访问你的所有片段。为此,您可能必须声明片段中声明的每个变量都应该是静态变量