我已经使用片段进行了应用。首先有一个家庭sreeen,其中有一个登录按钮。当用户点击登录按钮时,会打开一个新的片段,其中包含用户名和密码。我已将loginfragment放入backstack,以便用户可以导航到主屏幕。如果用户在登录frag中输入正确的凭据,则打开主片段。我也放置了mainfrag,这样我就可以来回导航。但是现在我想要的是当用户在主屏幕上,如果他按下后退按钮,应用程序应该关闭,但在我的情况下,它将返回到登录片段。
例如 1]如果用户从主屏幕按下登录按钮
backstack contains "login"
2]现在,如果用户输入正确的凭据并单击“确定”,则打开主要碎片
backstack contains "main"
"login"
3]现在在主要的frag我有2个按钮说A和B,现在如果用户点击按钮A
backstack contains "A"
"main"
"login"
现在我想要的是当用户在主要碎片上点击后退按钮时,应用程序应该完成,但在我的情况下它会返回到登录碎片,因为登录仍然存在于backstack中
答案 0 :(得分:0)
编辑 -
解决方案1:
@Override
public void onClick(View view) {
Intent intent = new Intent(view.getContext(), Main.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
getActivity().finish();
}
注意:
我假设 - Home class是您当前的主屏幕Class和Main class是您应用程序的主要起点。
使用举报Intent.FLAG_ACTIVITY_CLEAR_TOP
并在首页上致电首页。
解决方案2:
如果您只有一个处理所有片段的活动,那么只需调用
@Override
public void onClick(View view) {
getActivity().finish();
}
答案 1 :(得分:0)
你必须这样做:
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
&& !event.isCanceled()) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
return true;
}
return super.onKeyUp(keyCode, event);
}
说出它是否是你想要的:)
答案 2 :(得分:0)
当用户点击后退按钮时,首先从堆栈中获取条目。如果条目是您的主要片段,请杀死该应用。
android.os.Process.killProcess(android.os.Process.myPid()); 光洁度();
答案 3 :(得分:0)
虽然您只有登录片段可见(仅 片段堆栈 的登录片段),但如果单击后退按钮,那么您希望关闭活动吗?
解决方案:将login
片段添加到 片段堆栈 ,而不将其添加到 backstack (不使用addToBackStack()
方法。)
例如:
添加片段而不将其添加到backstack:
ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
添加片段并将其添加到backstack:
ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
然而,在调用commit()之前,您可能想要调用 addToBackStack(),以便将事务添加到后台堆栈中 片段交易。这个后栈由活动管理 允许用户通过按下返回到先前的片段状态 后退按钮。