为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千万里不及你 2022-09-22 15:57:06

好吧,假设我们有2个活动,例如主要活动(mA)和第二活动(sA)mA是用户界面,它从用户那里获取名称,编号。还有一个文本视图和一个按钮。该按钮通向 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);


查看完整描述

1 回答

?
红糖糍粑

TA贡献1518条经验 获得超4个赞

尝试使用 。startActivityForResult


阅读官方安卓开发者文档中的文档


从本质上讲,你会做的是将数据传递给称为s的对象,如下所示(例如在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()

}

回到您的第一个活动的方法overrideonActivityResult


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

     }

}

这些片段是非常快速和肮脏的片段,我建议例如,您在Java中将您作为静态变量,或者在Kotlin中的活动的伴随对象的属性中。requestCode


爪哇的等价物将是


在您的第一个活动中:


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();

}

回到您的第一个活动的方法overrideonActivityResult


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

     }

}


查看完整回答
反对 回复 2022-09-22

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信