所以.. 我有多个片段,用户在登录后看到的第一个片段被视为' WelcomeFragment'其余的并不重要。
我想只在用户查看WelcomeFragment时弹出一个用于注销过程的对话框。我怎样才能做到这一点?我试过以下:
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
if(getFragmentManager().getBackStackEntryCount() == 0) {
new AlertDialog.Builder(MenuActivity.this)
.setTitle("Logout")
.setMessage("Sure you want to logout?")
.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
tool.logout();
}
})
.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
})
.setIcon(R.mipmap.change)
.show();
}
else {
getFragmentManager().popBackStack();
}
}
}
(退出方法)
public void logout() {
Intent mainIntent = new Intent(context, MainActivity.class);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mainIntent.putExtra("logout", "logout");
context.startActivity(mainIntent);
}
答案 0 :(得分:0)
Fragment fr = getFragmentManager().findFragmentByTag("WelcomeFragmentTag");
if (null != fr && fr.isAdded()) {
// show dialog
} else {
// do not show dialog
}
这假设您已将WelcomeFragment
提供WelcomeFragmentTag
作为交易代码添加:
getSupportFragmentManager().beginTransaction()
.add(R.id.content_frame, new WelcomeFragment(), "WelcomeFragmentTag")
.commit();
答案 1 :(得分:0)
有两种可能性:
1)不要将WelcomeFragment添加到backstack,只验证这个onBackPressed函数:
FragmentManager fm = getSupportFragmentManager();
if(fm.getBackStackEntryCount()==0){
//Logout dialog
}
2)使用TAG添加WelcomeFragment并验证该TAG是否是onBackPressed函数的顶部:
FragmentManager fm = getSupportFragmentManager();
cont = fm.getBackStackEntryCount()
if(cont>0&&fm.getBackStackEntryAt(cont-1).getName().equals("WelcomeFragmentTAG"){
//Logout dialog
}
答案 2 :(得分:0)
首先删除所有片段,但欢迎片段 - 由于欢迎片段是第一个片段 -
FragmentManager fm =getFragmentManager();
for(int i=1; i < fm.getBackStackEntryCount(); i++)
{
fm.popBackStack();
}
然后检查当前片段是否为欢迎片段
Fragment fr = fm.findFragmentByTag("WelcomeFragmentTag");
if (null != fr && fr.isAdded()) {
// show dialog
} else {
// do not show dialog
}