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