使用意图时如何在第一个活动中不丢失任何数据

时间:2019-04-06 08:24:40

标签: java android android-intent android-activity

好的,可以说我们有2个活动,例如mainActivity(mA)和secondActivity(sA) mA是从用户处获取名称,编号的用户界面。 也有一个textview和一个按钮。 该按钮将导致sA。 sA有一个日历,可让您选择一天。 您选择了日期,然后返回到毫安,所选的日期将写在文本视图中。 到现在为止,这里的问题是,当我回到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);

1 个答案:

答案 0 :(得分:2)

尝试使用startActivityForResult

从官方Android Developer Docs

阅读文档

基本上,您要做的是像这样(例如在Kotlin中)通过称为Intent的对象传递数据:

在您的第一次活动中:

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;
     }
}