我现在有一个包含片段的活动
1、2、3、4
如果按下按钮,3,则可以重定向到4
我想实现后退按钮,如下所示。
当按回4时,它返回到3
当按回3时,它返回到2
当按回1时,活动结束();
当涉及到当前实现时,它将完成活动,而不是弹出片段。你能告诉我我应该做什么或记住什么吗?
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if( keyCode==KeyEvent.KEYCODE_BACK)
{
finish();
}
return super.onKeyDown(keyCode, event);
}
发布于 2014-02-08 02:53:01
这对我很有效。
当您从activity调用新片段时,-Add .addToBackStack(null)。
FragmentTransaction mFragmentTransaction = getFragmentManager()
.beginTransaction();
....
mFragmentTransaction.addToBackStack(null);
将-Add onBackPressed()添加到您的活动
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() == 0) {
this.finish();
} else {
getFragmentManager().popBackStack();
}
}
发布于 2013-09-12 13:05:47
你可以使用这个..对我很有效..
当按下back时,片段3似乎没有从视图中删除,所以您必须手动完成!
首先,不要使用replace(),而是分别使用remove和add。replace()似乎不能正常工作。
接下来的部分是重写onKeyDown方法,并在每次按下back按钮时删除当前片段。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
if (getSupportFragmentManager().getBackStackEntryCount() == 0)
{
this.finish();
return false;
}
else
{
getSupportFragmentManager().popBackStack();
removeCurrentFragment();
return false;
}
}
return super.onKeyDown(keyCode, event);
}
public void removeCurrentFragment()
{
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment currentFrag = getSupportFragmentManager().findFragmentById(R.id.f_id);
}
发布于 2014-10-01 22:20:19
更好的解决方案可能是遵循一种设计模式,以便back-button按钮事件从活动片段向下传播到主机活动。所以,就像..。如果其中一个活动片段消耗了背压,活动将无法对其执行操作,反之亦然。
一种方法是让所有的片段都扩展一个具有抽象“boolean onBackPressed()”方法的基本片段。
@Override
public boolean onBackPressed() {
if(some_condition)
// Do something
return true; //Back press consumed.
} else {
// Back-press not consumed. Let Activity handle it
return false;
}
}
跟踪活动中的活动片段,并在它的onBackPressed回调中编写如下代码
@Override
public void onBackPressed() {
if(!activeFragment.onBackPressed())
super.onBackPressed();
}
}
这篇文章详细描述了这种模式。
https://stackoverflow.com/questions/18755550
复制相似问题