我没有找到解决问题的办法。
我有几个片段(动态创建),但是我的后退按钮根本无法使用,按下它将会关闭应用程序,无论“活动”片段是什么。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.itemAdd:
FragmentTransaction tx = getFragmentManager().beginTransaction();
Fragment fragment = new NeuesProduktFrag();
tx.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right,
R.anim.slide_in_left, R.anim.slide_out_right);
tx.replace(R.id.main, fragment);
tx.addToBackStack(null);
tx.commit();
return true;
一切正常,但是输入“ NeuesProduktFrag”片段并按“返回”按钮后,我的应用程序将关闭。在不同的按钮等中尝试过不需要覆盖onBackPressed对吗?addToBackStack应该可以解决吗?
经过长时间的奋斗,这是我的最终代码:
@Override
public void onBackPressed() {
// initialize variables
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
// check to see if stack is empty
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
ft.commit();
}
else {
if (this.lastBackPressTime < System.currentTimeMillis() - 4000) {
Toast.makeText(this, "Nochmal drücken zum Beenden!", 4000).show();
this.lastBackPressTime = System.currentTimeMillis();
} else{
super.onBackPressed();
}
}
}
我在FragmentActivity中使用了它,并添加了一个双选项卡以最终关闭该应用程序。
我想在支持库的getFragmentManager()
中使用getSupportFragmentManager()
而不是支持库的FragmentActivity
时会出现问题。例如,当您想同时使用PreferenceFragment
和setSupportActionBar()
时。
通过一些更改,从ActionBarActivity
复制粘贴onBackPressed()
实现,已经解决了android.app.Activity
中的问题:
@Override
public void onBackPressed() {
if (getFragmentManager().popBackStackImmediate()) return;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
finish();
else
finishAfterTransition();
}
我的代码工作从FragmentActivity变为Activity。
编辑:键入错误
按返回按钮退出应用程序
@Override
public void onBackPressed() {
// initialize variables
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
// check to see if stack is empty
if (fm.getBackStackEntryCount() > 1) {
fm.popBackStack();
ft.commit();
} else {
if (backPressedTime + 2000 > System.currentTimeMillis()) {
backToast.cancel();
finishAffinity();
System.exit(1);
return;
} else {
backToast = Toast.makeText(getBaseContext(), "press back again to exit", Toast.LENGTH_LONG);
backToast.show();
}
backPressedTime = System.currentTimeMillis();
}
}