英文:
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>
专注分享java语言的经验与见解,让所有开发者获益!
评论