是否有一种方法,我们可以实现onBackPressed()在Android片段类似的方式,我们实现在Android活动?
因为Fragment的生命周期没有onBackPressed()。在android3.0片段中是否有其他替代方法来覆盖onBackPressed() ?
是否有一种方法,我们可以实现onBackPressed()在Android片段类似的方式,我们实现在Android活动?
因为Fragment的生命周期没有onBackPressed()。在android3.0片段中是否有其他替代方法来覆盖onBackPressed() ?
当前回答
在活动生命周期中,当我们使用FragmentActivity或AppCompatActivity时,总是android返回按钮处理FragmentManager事务。要处理backstack,我们不需要处理它的backstack计数或标记任何东西,但我们应该在添加或替换片段时保持专注。请找到以下片段来处理后退按钮的情况,
public void replaceFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if (!(fragment instanceof HomeFragment)) {
transaction.addToBackStack(null);
}
transaction.replace(R.id.activity_menu_fragment_container, fragment).commit();
}
在这里,我不会为我的主页片段添加回堆栈,因为它是我应用程序的主页。如果将addToBackStack添加到HomeFragment,那么应用程序将等待删除活动中的所有片段,然后我们将得到空白屏幕,所以我保持以下条件,
if (!(fragment instanceof HomeFragment)) {
transaction.addToBackStack(null);
}
现在,你可以看到之前添加的片段在活动和应用程序将退出时,到达HomeFragment。您还可以查看以下片段。
@Override
public void onBackPressed() {
if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
closeDrawer();
} else {
super.onBackPressed();
}
}
其他回答
在mainActivity实现回调接口中
protected mainActivity.OnBackPressedListener onBackPressedListener;
public interface OnBackPressedListener {
void doBack();
}
public void setOnBackPressedListener(mainActivity.OnBackPressedListener onBackPressedListener) {
this.onBackPressedListener = onBackPressedListener;
}
@Override
public void onBackPressed() {
if (onBackPressedListener != null) {
onBackPressedListener.doBack();
} else {
super.onBackPressed();
}
}
在片段实现接口OnBackPressedListener,我们写在mainActivity
implements mainActivity.OnBackPressedListener
mainActivity是我的基本活动,在你的片段onCreateView方法中编写以下代码
((mainActivity) getActivity()).setOnBackPressedListener(this);
并实现OnBackPressedListener接口方法doBack
@Override
public void doBack() {
//call base fragment
}
现在使用doBack()方法调用你想要调用的fragment
根据AndroidX发布说明,AndroidX。活动1.0.0-alpha01发布并引入了ComponentActivity,一个现有FragmentActivity和AppCompatActivity的新基类。这个版本给我们带来了一个新功能:
你现在可以通过addOnBackPressedCallback注册一个OnBackPressedCallback来接收onBackPressed()回调,而不需要在你的活动中覆盖这个方法。
如何使用onDestroyView()?
@Override
public void onDestroyView() {
super.onDestroyView();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK))
{
finish();
}
return super.onKeyDown(keyCode, event);
}
注释任何下键相关的方法现在addToBackStack将工作。 谢谢
在Fragments中处理onBackPressed()的简单方法
步骤1: 在activity中创建一个静态布尔值。
public static Fragment_one;
步骤2: 在On Create方法中的MainActivity(持有片段的活动)上声明
Fragment_one=true;
步骤3:在MainActivity中覆盖onBackPressed()
@Override
public void onBackPressed() {
if(Fragment_one) {
//Back key pressed on fragment one
}else {
//Back key pressed on fragment two
}
}
步骤4:在fragment_one上声明onCreateView方法
MainActivity.Fragment_one=true;
步骤5在fragment_two上声明onCreateView方法
MainActivity.Fragment_one=false;
注:此方法仅适用于两个片段。