我的应用只有一个活动但只有3个片段。
现在我找到了一种方法(Youtube视频),以便在点击手机上的后退按钮后停止应用程序退出。
boolean twice = false;
@Override
public void onBackPressed() {
Log.d(TAG, "click");
if(twice == true){
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
System.exit(0);
}
twice = true;
Log.d(TAG, "twice: " + twice);
// super.onBackPressed();
Toast.makeText(MainActivity.this, "Tap twice to exit", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
twice = false;
Log.d(TAG, "twice: " + twice);
}
}, 2000);
}
另一个线程显示代码到"导航"带有后退按钮的片段之间 How to implement onBackPressed() in Fragments?
那是代码
@Override
public void onBackPressed(){
int count = getFragmentManager().getBackStackEntryCount();
if (count == 0) {
super.onBackPressed();
//additional code
} else {
getFragmentManager().popBackStack();
}
}
当我在第一个代码行下添加应用程序退出完成后,点击手机上的后退按钮。有人可以告诉我在哪里添加第二个代码行,这样两件事都可以工作吗?
提前多多感谢
答案 0 :(得分:0)
<强>已更新强> 这是我在片段交易中添加片段条目到BackStack时所做的事情
ReviewOrder fragment = new ReviewOrder();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.slide_in_up,
R.anim.slide_out_up); //OPTIONAL For Animations
fragmentTransaction.replace(R.id.tabframelayout,fragment,FRAGMENT_TAG);
//Add This To Your Code To Add To BackStack
fragmentTransaction.addToBackStack(FRAGMENT_TAG);
fragmentTransaction.commit();
你可以做的是只在(count == 0)时执行你的双击逻辑(第一个代码),这样如果backstack中有一个片段,你的app就不会退出了
boolean twice = false;
@Override
public void onBackPressed() {
int count = getFragmentManager().getBackStackEntryCount();
if (count == 0) {
Log.d(TAG, "click");
if(twice == true){
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
super.onBackPressed();
}
twice = true;
Log.d(TAG, "twice: " + twice);
Toast.makeText(MainActivity.this, "Tap twice to exit",
Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
twice = false;
Log.d(TAG, "twice: " + twice);
}
}, 2000);
} else {
getFragmentManager().popBackStack();
}
}