перезапуск активности в Android

#android #listview #onresume

#Android #listview #onresume

Вопрос:

У меня есть одно действие A, в котором есть одна кнопка и одно представление списка, в котором отображаются названия книг. при нажатии кнопки запускается действие B, пользователь заполняет форму книги и сохраняет ее. когда он нажимает кнопку «Назад», пользователь переходит к действию A. Здесь название книги должно быть обновлено в listview. Я думаю, что мне нужно написать некоторый код в onResume() . Подскажите, пожалуйста, что написать. Я использую настраиваемый просмотр списка.

Ответ №1:

Запустите действие B с startActivityForResult() помощью и используйте метод onActivityResult() для перезапуска или обработки новых данных

Например, чтобы запустить действие B:

 String callingActivity = context.getLocalClassName();
Intent newActivity = new Intent(getApplicationContext(),ActivityB.class);
newActivity.setData(Uri.parse(callingActivity));
startActivityForResult(newActivity, 0);
 

Затем где-то в вашей активности класс:

 protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(requestCode == 0){
            // do processing here
        }
    }
 

Других ответов должно быть достаточно, но onResume() может вызываться в тех случаях, когда активность возобновляется другими способами.

Чтобы просто перезапустить действие A, когда пользователь нажимает кнопку «Назад» из действия B, затем поместите следующее в onActivityResult:

 if(requestCode == 0){
            finish();
            startActivity(starterintent);

        }
 

И при создании действия A добавьте starterintent = getIntent();

Просто не забудьте инициализировать переменную с Intent starterintent; помощью somewhere перед вызовом onCreate.

например

 public class ActivityA extends ListActivity {
  Intent starterintent;

  public void onCreate(Bundle b){
    starterintent = getIntent();
  }

  protected void onActivityResult(int requestCode, int resultCode, Intent data){
    if(requestCode == 0){
      finish();
      startActivity(starterintent);
    }
  }

  private void startActivityB(){
    String callingActivity = context.getLocalClassName();
    Intent newActivity = new Intent(getApplicationContext(),ActivityB.class);
    newActivity.setData(Uri.parse(callingActivity));
    startActivityForResult(newActivity, 0);
  }

}
 

Затем просто вызывайте startActivityB() с помощью нажатия кнопки или чего-то еще

Комментарии:

1. Нужно ли отправлять данные из activity B. Если мне нужно отправить, как отправить данные.

2. @prabhuM это зависит от того, как хранятся ваши данные. Если он сохранен в базе данных, или в файле, или даже в sharedpreferences, то нет, Activity A сможет получить к нему доступ при условии, что пользователь фактически сохранит данные в Activity B перед нажатием кнопки назад. В любом случае, я не знаю способа передачи данных через действие кнопки «Назад».

Ответ №2:

ДА, вы правы. Напишите код в onResume.

При обновлении даты просто вызовите notifyDataSetChanged(); для вашего адаптера ListView

Надеюсь, это поможет вам!

Ответ №3:

Вы можете либо запустить действие, когда пользователь нажмет на Сохранить, и это исправит это для вас. Или, если вы хотите нажать назад:

 @Override
public void onResume(){
    super.onResume();
    list.clear();
    list.addAll(getBooks());
    adapter.notifyDataSetChanged();
}