当您使用intent时,如何不丢失第一个活动中的任何数据

问题描述 投票:-1回答:1

好吧,假设我们有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);
java android android-intent android-activity
1个回答
2
投票

尝试使用startActivityForResult

阅读官方Android Developer Docs的文档

基本上你要做的是通过像Intents这样的对象传递数据(例如在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;
     }
}
© www.soinside.com 2019 - 2024. All rights reserved.