如何在片段中按下后退按钮时显示警告消息
How to show warning message when back button is pressed in fragments
我希望应用程序在用户按下后退按钮时显示警告消息,如果用户 select 是,它将返回。我在导航图片段中。
我在 stack Overflow 中搜索了很多次并尝试过:
@Override
public void onBackPressed() {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Save Or Not");
builder.setMessage("Do you want to save this? ");
builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
/*Go back:-I dont know how*/
}
});
builder.setNegativeButton("Discard",null);
builder.show();
}
但是它显示了 giver 错误:
方法未覆盖其超类中的方法
编辑:
我想在导航图片段
中设置 onBackPressedListener(手机后退按钮)
在按钮点击监听器中添加这一行MainActivity.super.onBackPressed();
替换您的 Activity 名称而不是 MainActivity
builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
MainActivity.super.onBackPressed();
//Replace your Activity name insted of MainActivity
}
});
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Replace Your Own Action Like Adding Toast etc and Also SuperOnbackprssed or any overriden method
dialog.cancel();
}
});
使用 Fragments 1.1.0(目前处于 alpha 阶段)时,您可以遵循 Provide custom back navigation documentation, which shows how to register an OnBackPressedCallback
,它允许您从 Fragment 中注册 onBackPressed()
回调:
public class MyFragment extends Fragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// This callback will only be called when MyFragment is at least Started.
OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */) {
@Override
public void handleOnBackPressed() {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Save Or Not");
builder.setMessage("Do you want to save this? ");
builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Save your content
save();
// Then pop
NavHostFragment.findNavController(MyFragment.this).popBackStack();
}
builder.setNegativeButton("Discard",null);
builder.show();
});
}
});
requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
}
}
我希望应用程序在用户按下后退按钮时显示警告消息,如果用户 select 是,它将返回。我在导航图片段中。
我在 stack Overflow 中搜索了很多次并尝试过:
@Override
public void onBackPressed() {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Save Or Not");
builder.setMessage("Do you want to save this? ");
builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
/*Go back:-I dont know how*/
}
});
builder.setNegativeButton("Discard",null);
builder.show();
}
但是它显示了 giver 错误: 方法未覆盖其超类中的方法
编辑: 我想在导航图片段
中设置 onBackPressedListener(手机后退按钮)在按钮点击监听器中添加这一行MainActivity.super.onBackPressed();
替换您的 Activity 名称而不是 MainActivity
builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
MainActivity.super.onBackPressed();
//Replace your Activity name insted of MainActivity
}
});
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Replace Your Own Action Like Adding Toast etc and Also SuperOnbackprssed or any overriden method
dialog.cancel();
}
});
使用 Fragments 1.1.0(目前处于 alpha 阶段)时,您可以遵循 Provide custom back navigation documentation, which shows how to register an OnBackPressedCallback
,它允许您从 Fragment 中注册 onBackPressed()
回调:
public class MyFragment extends Fragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// This callback will only be called when MyFragment is at least Started.
OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */) {
@Override
public void handleOnBackPressed() {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Save Or Not");
builder.setMessage("Do you want to save this? ");
builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Save your content
save();
// Then pop
NavHostFragment.findNavController(MyFragment.this).popBackStack();
}
builder.setNegativeButton("Discard",null);
builder.show();
});
}
});
requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
}
}