何处为Fragements

时间:2018-01-12 20:39:37

标签: android android-fragments onbackpressed

我的应用只有一个活动但只有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();
}

}

当我在第一个代码行下添加应用程序退出完成后,点击手机上的后退按钮。有人可以告诉我在哪里添加第二个代码行,这样两件事都可以工作吗?

提前多多感谢

1 个答案:

答案 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();
}
}