注销时如何清除导航抽屉(所有碎片)

时间:2017-07-27 13:29:16

标签: android android-fragments navigation-drawer

我想按退出按钮后删除/清除导航片段。

详情

在Fragment中我有一个按钮,我想退出并返回登录界面(活动),我已经尝试了所有可能的解决方案,但没有得到我的问题的解决方案。问题是一样的,从我按下后退按钮的登录活动再次进入注销片段,我已经使用下面的代码了

我正在使用app.Fragment,而我正在使用以下ans,

第一个解决方案

FragmentManager fm = getActivity().getFragmentManager();
fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

第二个解决方案

FragmentManager fm = getFragmentManager();
int count = fm.getBackStackEntryCount();
for(int i = 0; i < count; ++i) { fm.popBackStack(); }

第3次Soultion

getFragmentManager().popBackStack(getFragmentManager()
               .getBackStackEntryAt(0).getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);

第四个解决方案

FragmentManager manager = getFragmentManager();
manager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

startActivity(new Intent(mContext, Login_Activity.class));

以上代码均不适合我,需要建议和解决方案,谢谢

4 个答案:

答案 0 :(得分:0)

在退出时使用getActivity.finish()并结束其他活动..

答案 1 :(得分:0)

getActivity().getSupportFragmentManager().beginTransaction().remove(this).commit();

来自您的片段 或致电

getSupportFragmentManager().beginTransaction().remove(fragment).commit();

来自您的活动

从您要在注销

上删除的片段中调用此内容

答案 2 :(得分:0)

科特林溶液。在Java中也应该可行。
这将删除所有后台活动,因此不需要循环。您可以将此代码放入退出/退出方法

val intent = Intent(this, ypurAfterSignOutAcitivy::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)

答案 3 :(得分:0)

对我来说,完成活动并以额外的工作正常重新启动它 (我使用的是单个活动,对于多个活动,您可以广播您的活动并完成它们)

fun logout() {//this is on MainActivity
  val intent = Intent(this, MainActivity::class.java).apply {
    putExtra(EXTRA_START_FRAG, R.id.loginFragment)
  }
  startActivity(intent)
  finish()
}
然后在重新启动时我检查这个额外的并导航到它

navController.navigate(extras.getInt(EXTRA_START_FRAG))
我的猜测是即使你使用导航组件你也可以做类似的事情