Can I end an activity and start a new one from a fragment switch case?

huangapple 未分类评论48阅读模式
英文:

Can I end an activity and start a new one from a fragment switch case?

问题

我正在使用Android Studio工作。我有一个底部导航片段。对于最后一个switch case,我需要一个按钮来导航到HomeActivity(主屏幕)。我尝试过:

...

  case SUMMARY:
             navNextText.setText(R.string.end);
             navNextImageView.setOnClickListener(v -> navigateHome());
             navNextText.setOnClickListener(v -> navigateHome());
             break;

        default:
            Log.w(TAG, "在navigateNext()中执行默认案例。CTX:" + contextState.toString());
    }

 private void navigateHome() {
    Objects.requireNonNull(getActivity()).finish();
    Intent in = new Intent(getActivity(), HomeActivity.class);
    startActivity(in);
}

这在某种程度上是有效的。我可以回到主页,但是当我返回到包含导航片段的活动时,导航栏会恢复到之前切换活动的位置。
我还尝试过在private void navigateHome中添加onStop()onDestroy,但似乎没有任何作用。
我只是想知道从片段关闭一个活动并启动一个新活动的更加清晰的方法。

英文:

I am working in android studio.I have a bottom-navigation fragment. For the last switch case, I need a button to navigate to the HomeActivity (home screen). I tried:

...

  case SUMMARY:
             navNextText.setText(R.string.end);
             navNextImageView.setOnClickListener(v -> navigateHome());
             navNextText.setOnClickListener(v -> navigateHome());
             break;

        default:
            Log.w(TAG, "Executing a default case in navigateNext(). CTX: " + contextState.toString());
    }

 private void navigateHome() {
    Objects.requireNonNull(getActivity()).finish();
    Intent in = new Intent(getActivity(), HomeActivity.class);
    startActivity(in);
}

This works to an extent. I can navigate home, but when I click back into the activity that the navigation fragment resides, the navigation bar resumes where it was previous to changing activity.
I have also tried adding onStop() and onDestroy to private void navigateHome, but that seemed to do nothing.
I am just wondering what is the cleaner way to close an activity from a fragment and start a new one.

答案1

得分: 0

只需在想要从返回堆栈中移除当前活动的位置添加 finish()

由于您在一个片段中,可以使用 requireActivity().finish()

另外,为了确保在返回堆栈中没有活动,您可以使用以下意图标志来移除所有活动:

private void navigateHome() {
    Objects.requireNonNull(getActivity()).finish();
    Intent in = new Intent(getActivity(), HomeActivity.class);
    in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // <<<<< 标志
    startActivity(in);
    requireActivity().finish(); // <<< 结束当前活动
}
英文:

just add finish() if you want to remove the current activity from the backstack
As you're in a fragment, use requireActivity().finish()

Also to make sure you have no activities in back stack, you can remove all using below intent flag

 private void navigateHome() {
    Objects.requireNonNull(getActivity()).finish();
    Intent in = new Intent(getActivity(), HomeActivity.class);
    in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // <<<<< flag
    startActivity(in);
    requireActivity().finish(); // <<< finish the current activity
}



</details>



huangapple
  • 本文由 发表于 2020年5月30日 00:02:05
  • 转载请务必保留本文链接:https://java.coder-hub.com/62090079.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定