好吧,假设我们有2个活动,例如mainActivity(mA)和secondActivity(sA)mA是用户界面,它取名字来自用户。还有一个textview和一个按钮。按钮通向sA。 sA有一个日历,可让您选择一天。您选择日期并返回到mA,并且您选择的日期将写入文本视图。现在好了,问题是,当我回到mA时,我从用户那里得到的我以前的数据被删除了它除了我的文本视图我得到了日期。如何在进行其他活动之前保存用户数据,当我回来时他们会留下来。
当我从第二个活动回来时,我希望从第一个屏幕看到我的数据。
编辑:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), calendarActivity.class);
startActivity(intent);
}
}
calendar.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
String date = dayOfMonth + "/" + month + "/" + year;
intent = new Intent(getApplicationContext(), MainActivity.class);
intent.putExtra("date", date);
startActivity(intent);
}
});
String date = getIntent().getStringExtra("date");
tarih.setText(date);
尝试使用startActivityForResult
。
阅读官方Android Developer Docs的文档
基本上你要做的是通过像Intent
s这样的对象传递数据(例如在Kotlin中):
在您的第一个活动中:
private fun goToSelectDateActivity() {
val requestCode =324
val intent = Intent(this, CalendarActivity::class.java)
startActivityForResult(intent, requestCode)
}
在你的第二个活动中
private fun passSelectedDateToPreviousActivity(selectedDate: Date) {
val data = Intent()
data.putExtra("DATE", selectedDate.toString());
setResult(Activity.RESULT_OK, data);
finish()
}
回到你的第一个活动override
方法onActivityResult
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if(resultCode != Activity.RESULT_OK) return
when(requestCode) {
324 -> { yourTextView.text = data.getStringExtra("DATE"); }
// Other result codes
else -> {}
}
}
这些片段是非常快速和脏的片段,我建议你将你的requestCode
作为Java中的静态变量或者在Kotlin中的Activity的伴随对象的属性中。
Java等价物将是
在您的第一个活动中:
private void goToSelectDateActivity() {
int requestCode =324;
Intent intent = new Intent(this, CalendarActivity.getClass());
startActivityForResult(intent, requestCode);
}
在你的第二个活动中
private void passSelectedDateToPreviousActivity(Date selectedDate) {
Intent data = new Intent();
data.putExtra("DATE", selectedDate.toString());
setResult(Activity.RESULT_OK, data);
finish();
}
回到你的第一个活动override
方法onActivityResult
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode != Activity.RESULT_OK) return;
switch(requestCode) {
case 324:
yourTextView.setText(data.getStringExtra("DATE"));
break;
// Other result codes
default: break;
}
}