как не потерять какие-либо данные в первом действии, когда вы используете намерение - PullRequest
0 голосов
/ 06 апреля 2019

Хорошо, допустим, у нас есть 2 действия, таких как mainActivity (mA) и secondActivity (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 Ответ

2 голосов
/ 06 апреля 2019

Попробуйте использовать startActivityForResult.

Прочитайте документы из официальных Документов для разработчиков Android

По сути, вы должны передать данные через объекты, называемые 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 или внутри атрибута объекта-компаньона для Activity в Kotlin.

Эквивалент 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;
     }
}
...