android - 如何将日期从一项活动传递到另一项活动?
问题描述
我正在开发巴士预订应用程序。
这是我的主页:
在任何地方单击 JournyDate 布局将打开此页面:
基本上,我需要在 JournyDate 布局上设置选定的日期。
对于日历,我正在使用这个库。
家庭片段
datelayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getContext(), DateChooser.class);
startActivityForResult(intent, 11);
}
});
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK && requestCode == 11) {
Date date = new Date(data.getExtras().getString("Date"));
txtDate.setText((CharSequence) date);
}
}
DateChooser 活动
public class DateChooser extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_date_chooser);
MaterialCalendarView calendarView = (MaterialCalendarView) findViewById(R.id.calendarView);
CalendarDay calendarDay = calendarView.getCurrentDate();
calendarView.setCurrentDate(calendarDay);
Date date = calendarDay.getDate();
calendarView.setOnDateChangedListener(new OnDateSelectedListener() {
@Override
public void onDateSelected(@NonNull MaterialCalendarView widget, @NonNull CalendarDay date, boolean selected) {
Intent result = new Intent();
result.putExtra("Date", date);
setResult(RESULT_OK, result);
finish();
}
});
}
}
错误
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.smiles.bus, PID: 19691
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=65547, result=-1, data=Intent { (has extras) }} to activity {com.smiles.bus/com.smiles.bus.MainActivity}: java.lang.IllegalArgumentException: The string argument is null
at android.app.ActivityThread.deliverResults(ActivityThread.java:4998)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:5041)
at android.app.ActivityThread.access$1600(ActivityThread.java:229)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1875)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7325)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: java.lang.IllegalArgumentException: The string argument is null
at java.util.Date.parse(Date.java:384)
at java.util.Date.<init>(Date.java:157)
at com.smiles.bus.Home.onActivityResult(Home.java:129)
at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:156)
at android.app.Activity.dispatchActivityResult(Activity.java:7165)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4994)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:5041)
at android.app.ActivityThread.access$1600(ActivityThread.java:229)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1875)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7325)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
解决方案
如果您希望 DateChooser 作为活动启动,请使用以下命令启动它:
Intent intent = new Intent(this, DateChooser.class);
startActivityForResult(intent, REQUEST_DATE);
并对结果做出反应:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK && requestCode == REQUEST_DATE) {
Date date = new Date(data.getExtras().getString(EXTRA_DATE));
...
}
}
在 DateChooser 中返回结果如下:
Intent result = new Intent();
result.putExtra(EXTRA_DATE, date);
setResult(RESULT_OK, result);
finish();
定义EXTRA_DATE
为字符串常量和REQUEST_DATE
int 常量。
我没有测试日期值的正确转换。应该只是一个灵感。
推荐阅读
- python - ValueError:检查目标时出错:预期 main_prediction 有 3 个维度,但得到了形状为 (1128, 1) 的数组
- javascript - SyntaxError: super() 仅在派生类构造函数中有效
- firebase - 基于谷歌“托管域”授权用户
- html - 防止 HTML 输入在溢出时移动
- javascript - 使用 Map + Rest 运算符 (JavaScript)
- c - 参考函数未编译
- javascript - 看不到警报 - 通过 TempData 引导的 mvc5
- css - Css:仅更改第一个 div
- javascript - 如果在 div 中找到值,则按类名更新最近跨度的值
- android-emulator - BlueStacks 的 DRM 支持