我在编码方面有一个小问题。
我的目标:我有2个片段[0]和[1]。我的默认片段是[0]。按下[1]后,我按返回键,然后返回到片段[0](而不是关闭应用程序)。
这是一个可以正常工作的代码,
知道片段[1]已经在堆栈中:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new FragmentUn().addToBackStack(null).commit();
这是backPressed上的代码:
@Override
public void onBackPressed() {
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else if (getFragmentManager().getBackStackEntryCount() > 0){
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
这段代码很好用,但是我想做的是一次添加一个动作(popUp)到达片段[0],该片段询问用户在按下返回键时是否要离开应用程序(此处应用程序仅关闭)
为此,我写道:
@Override
public void onBackPressed() {
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else if (getFragmentManager().getBackStackEntryCount() > 0){
getFragmentManager().popBackStack();
} else {
AlertDialog.Builder exitPopUp = new AlertDialog.Builder(this);
exitPopUp.setTitle("Exit");
exitPopUp.setMessage("Voulez-vous quitter L'App ?");
exitPopUp.setPositiveButton("Oui", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
finish();
}
});
exitPopUp.setNegativeButton("Non", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
exitPopUp.setNeutralButton("Noter", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Uri uri = Uri.parse("market://details?id=" + getApplicationContext().getPackageName());
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
// To count with Play market backstack, After pressing back button,
// to taken back to our application, we need to add following flags to intent.
goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
try {
startActivity(goToMarket);
} catch (ActivityNotFoundException e) {
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("http://play.google.com/store/apps/details?id=" + getApplicationContext().getPackageName())));
}
}
});
exitPopUp.show();
}
}
结果==>在片段[0]或[1]上按回车键时,应用程序立即显示弹出窗口。除了我只希望到达显示弹出窗口的片段[0]之外。 [1]-返回键-> [0]-返回键->退出弹出窗口。
那我该怎么做才能使其正常工作?预先谢谢你:)
答案 0 :(得分:0)
@Override
public void onBackPressed() {
super.onBackPressed();
MainFragment main = (MainFragment) getSupportFragmentManager().findFragmentByTag("main");
if (main != null && main.isVisible()) {
if (mExitCheck < 1) {
Toast.makeText(this, "Press back again to exit", Toast.LENGTH_SHORT).show();
} else {
//mExitCheck = 0 is an int
mExitCheck = 0;
//Finish() to exit the app
finish();
}
mExitCheck++;
} else {
showMain();
}
}
答案 1 :(得分:0)
最简单的方法是将int设置为0(或任何使您知道自己位于第一个片段上的标志)。
//do this for your first fragment
Fragment fragment = MainFragment.newInstance();
FragmentTransaction transaction =
getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.layout_container, fragment, "main").commit();
mCurrentFrag = 0;
// and this for others
Fragment fragment = MainFragment.newInstance();
FragmentTransaction transaction =
getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.layout_container, fragment, "main").commit();
mCurrentFrag = 1;
然后执行以下操作
@Override
public void onBackPressed() {
if (mCurrentFrag == MAIN_FRAG){
runOnUiThread(new Runnable() {
@Override
public void run() {
AlertDialog.Builder exitPopUp = new AlertDialog.Builder(MainActivity.this);
exitPopUp.setTitle("Exit");
exitPopUp.setMessage("Are you sure you want to exit?");
exitPopUp.setPositiveButton("Oui", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
finish();
}
});
exitPopUp.setNegativeButton("Non", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
exitPopUp.setNeutralButton("Noter", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Uri uri = Uri.parse("market://details?id=" + getApplicationContext().getPackageName());
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
try {
startActivity(goToMarket);
} catch (ActivityNotFoundException e) {
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("http://play.google.com/store/apps/details?id=" + getApplicationContext().getPackageName())));
}
}
});
exitPopUp.show();
}
});
}else{
super.onBackPressed();
}
}