Android中如何在Activity间传递日期?巴士预订APP日期回显
解决方案:实现日期选择后返回并更新首页布局
你已经完成了首页跳转到日期选择页面的触发逻辑,接下来只需要两步就能把选中的日期回显到JournyDate布局里:
1. 在DateChooser页面处理日期选中并返回数据
首先,在你的DateChooserActivity中,当用户通过第三方日历库选中日期后,要把选中的日期数据通过Intent返回给首页Fragment。这里以常用的MaterialDatePicker为例(其他第三方库逻辑类似,核心是获取选中的日期对象并打包):
// 以MaterialDatePicker为例,初始化并监听选中事件 MaterialDatePicker<Long> datePicker = MaterialDatePicker.Builder.datePicker().build(); datePicker.addOnPositiveButtonClickListener(selection -> { // 将选中的时间戳转换为易读的日期格式,比如"yyyy-MM-dd" SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); String selectedDate = sdf.format(new Date(selection)); // 准备返回的Intent,携带选中日期 Intent resultIntent = new Intent(); resultIntent.putExtra("SELECTED_DATE", selectedDate); setResult(Activity.RESULT_OK, resultIntent); finish(); // 关闭日期选择页面 });
如果你的第三方日历库直接返回Calendar对象或日期字符串,直接把对应数据放进Intent即可,无需时间戳转换。
2. 在首页Fragment的onActivityResult中接收数据并更新布局
补全你Fragment里的onActivityResult方法,接收返回的日期数据后,更新JournyDate布局的显示(假设布局内有用于展示日期的TextView):
@Override public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); // 匹配跳转时设置的requestCode(你定义的11) if (requestCode == 11 && resultCode == Activity.RESULT_OK && data != null) { // 获取返回的日期字符串 String selectedDate = data.getStringExtra("SELECTED_DATE"); // 更新JournyDate布局的显示,假设布局内TextView的id为tv_journey_date TextView tvJourneyDate = datelayout.findViewById(R.id.tv_journey_date); tvJourneyDate.setText(selectedDate); // 如果需要调整布局样式或其他内容,可在此处补充逻辑 } }
小提示
- 务必确保
DateChooser页面在用户选中日期后调用setResult(RESULT_OK, intent),否则首页Fragment会接收不到有效数据。 - 若第三方日历库有特殊日期格式要求,调整日期格式化规则即可适配。
- 如果你使用AndroidX,也可以用更推荐的
registerForActivityResultAPI替代onActivityResult,上述写法兼容旧版本,也能正常工作。
内容的提问来源于stack exchange,提问作者user9696717
相关产品推荐
相关产品推荐

