java - 我可以结束一个活动并从一个片段开关案例开始一个新的活动吗?
问题描述
我在 android studio 工作。我有一个底部导航片段。对于最后一个 switch 案例,我需要一个按钮来导航到 HomeActivity(主屏幕)。我试过了:
...
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);
}
这在一定程度上有效。我可以导航回家,但是当我单击返回导航片段所在的活动时,导航栏会恢复到更改活动之前的位置。我也尝试过添加onStop()
and onDestroy
to private void navigateHome
,但这似乎无济于事。我只是想知道从片段中关闭活动并开始新活动的更清洁方法是什么。
解决方案
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
}
推荐阅读
- python - 当我尝试从字符串中提取日期时出现此消息
- javascript - 如何制作进度条以在网站上显示云功能进度?
- python - .getlist() 没有在 django / html 表单复选框输入中返回任何内容
- swift - 快速将元组解构为函数参数
- iptc - 保存关键字后如何防止IPTCInfo3复制原件?
- c# - 在某个位置实例化对象?
- angular - 为什么动态实例化的组件会被裁剪?
- python - 每当我运行它时,它都会给我 TypeError: can only concatenate str (not "bytes") to str 而且我不知道如何解决它?
- javascript - 'TypeError:无法在反应原生中读取未定义'的属性'getStateForAction'
- javascript - 正则表达式将 [ ] 之间的 ',' 替换为 '.'