如何禁用在android片段类中按下的后退按钮
Posted
技术标签:
【中文标题】如何禁用在android片段类中按下的后退按钮【英文标题】:How to disable back button pressed in android fragment class 【发布时间】:2013-07-18 07:38:54 【问题描述】:我想禁用片段类中的后退按钮。 onBackPressed()
在这个片段中似乎不起作用。如何禁用后退按钮?
这是我的示例代码:
public class Login extends Fragment
public View onCreateView(LayoutInflater inflater, ViewGroup container,
,Bundle savedInstanceState)
ViewGroup root = (ViewGroup) inflater.inflate(R.layout.login, null);
return root;
public void onBackPressed()
【问题讨论】:
用于片段 popbackstack() 方法.. 【参考方案1】:您必须覆盖父 FragmentActivity 类的 onBackPressed。因此,将您的代码放在父 FragmentActivity 中。或者您可以使用以下方法调用父母的方法:
public void callParentMethod()
getActivity().onBackPressed();
在 FragmentActivity 中重写 onBackPressed 方法并且不调用它的超类来禁用返回按钮。
@Override
public void onBackPressed()
//super.onBackPressed();
//create a dialog to ask yes no question whether or not the user wants to exit
...
【讨论】:
【参考方案2】:这是您可以通过新的活动回调在片段中管理onBackPressed()
的新方法:
// Disable onBack click
requireActivity().onBackPressedDispatcher.addCallback(this)
// With blank your fragment BackPressed will be disabled.
这里是安卓文档链接:https://developer.android.com/reference/androidx/activity/OnBackPressedDispatcher
【讨论】:
【参考方案3】:在您的 oncreateView() 方法中,您需要编写此代码,并且在 KEYCODE_BACk 中返回应为 true,然后它将停止特定片段的后退按钮选项
View v = inflater.inflate(R.layout.xyz, container, false);
//Back pressed Logic for fragment
v.setFocusableInTouchMode(true);
v.requestFocus();
v.setOnKeyListener(new View.OnKeyListener()
@Override
public boolean onKey(View v, int keyCode, KeyEvent event)
if (event.getAction() == KeyEvent.ACTION_DOWN)
if (keyCode == KeyEvent.KEYCODE_BACK)
return true;
return false;
);
【讨论】:
只有在使用View v = inflater.inflate(R.layout.fragment, null);
时才对我有用【参考方案4】:
在您的父活动中
@Override
public void onBackPressed()
Fragment f = getSupportFragmentManager().findFragmentById(R.id.content_frame);
if (f instanceof yourfragment) //the fragment on which you want to handle your back press
Log.i("BACK PRESSED", "BACK PRESSED");
else
super.onBackPressed();
【讨论】:
我想知道如何使用 findFragmentById,现在我也知道了。很棒【参考方案5】:OnBackPressedCallback
这是您可以在 Fragment 类中编写以自定义后退按钮按下的代码。
public class MyFragment extends Fragment
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */)
@Override
public void handleOnBackPressed()
// Handle the back button even
Log.d("BACKBUTTON", "Back button clicks");
;
requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
相关链接
你可以阅读和研究更多关于这个HERE
【讨论】:
【参考方案6】:我知道为时已晚, 在片段 onCreate
val callback = requireActivity().onBackPressedDispatcher.addCallback(this)
Log.d("tag","back button pressed") // Handle the back button event
callback.isEnabled
【讨论】:
是的!这应该工作:developer.android.com/guide/navigation/navigation-custom-back【参考方案7】:@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
if ( keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0)
onBackPressed();
return super.onKeyDown(keyCode, event);
@Override
public void onBackPressed()
return;
【讨论】:
【参考方案8】:改变
public void onBackPressed()
到
@Override
public void onBackPressed()
super.onBackPressed()
或
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
if (keyCode == KeyEvent.KEYCODE_BACK)
return super.onKeyDown(keyCode, event);
【讨论】:
【参考方案9】:如果您希望片段在没有任何按钮操作的情况下永远不会关闭,您可以尝试阻止取消片段。
在你的片段方法中添加这个
this.setCancelable(false);
【讨论】:
【参考方案10】:只需在您要禁用后按的片段中覆盖onBackPressed
。
更多信息在这里:https://developer.android.com/reference/androidx/activity/OnBackPressedDispatcher
public class Login extends Fragment
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
super.onViewCreated(view, savedInstanceState);
OnBackPressedCallback callback = new OnBackPressedCallback(true)
@Override
public void handleOnBackPressed()
// Log.d("TAG", "Pressed...");
;
requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
【讨论】:
【参考方案11】:只需放置一个透明视图并为其设置 onClickListener
【讨论】:
请为提问者提供更详细的信息。代码 sn-p 可能很好。 只需创建一个 match_parent 视图并设置背景透明。为这个视图设置 onClickListener 并且在里面什么也不做以上是关于如何禁用在android片段类中按下的后退按钮的主要内容,如果未能解决你的问题,请参考以下文章
如果在 WebView 片段中按下后退按钮,如何返回上一页?