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

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


person Prabhu M    schedule 21.10.2011    source источник


Ответы (3)


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

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

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

Затем где-то в вашем классе Activity A:

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

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

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

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

        }

И в onCreate Activity A добавьте starterintent = getIntent();

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

e.g.

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() нажатием кнопки или что-то еще

person aperture    schedule 21.10.2011
comment
Нужно ли отправлять данные из действия B. Если мне нужно отправить, как отправить данные. - person Prabhu M; 21.10.2011
comment
@prabhuM, это зависит от того, как хранятся ваши данные. Если он сохранен в базе данных, или в файле, или даже в общих настройках, то нет, действие A сможет получить к нему доступ при условии, что пользователь действительно сохранит данные в действии B, прежде чем нажать кнопку «Назад». В любом случае, я не знаю, как передать данные через действие кнопки «Назад». - person aperture; 21.10.2011

Да ты прав. Пишите код в onResume.

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

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

person ihrupin    schedule 21.10.2011

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

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