片段android中的后退按钮问题

时间:2014-07-24 07:19:07

标签: android fragment

我已经使用片段进行了应用。首先有一个家庭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中

4 个答案:

答案 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(),以便将事务添加到后台堆栈中   片段交易。这个后栈由活动管理   允许用户通过按下返回到先前的片段状态   后退按钮。

Read more about fragments.