Android; Как я могу инициализировать состояние в одном действии, а затем сделать другое обновление?
У меня два занятия
Первый получает данные от контент-провайдера и отображает их
У второго действия есть кнопка, и при нажатии она должна вызвать первое действие, чтобы "обновить", другими словами, чтобы перезагрузить данные от поставщика контента.
Это мое первое занятие
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contactsview);
// Grab data and put it onto screen
getDataAndPutToUI();
}
@Override
public void onStart()
{
//Refresh data
getDataAndPutToUI();
}
...
И это мое второе занятие
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.optionsview);
Button button = (Button) findViewById(R.id.intentButton);
button.setOnClickListener(this);
}
// This is bound to the "refresh" button
@Override
public void onClick(View v) {
// Call first activity, to reload the contacts
Intent i = new Intent(this, FirstActivity.class);
startActivity(i);
}
Это правильный способ реализации такой функциональности? Это неправильно, но я не могу определить причины для резервного копирования своих претензий
2 ответа
Это зависит от того, какое поведение вы ищете. Как вы уже реализовали, первая активность будет обновляться каждый раз, когда она отображается пользователю. Например, если пользователь нажал кнопку "Домой" во время первого занятия, а затем вернулся к первому занятию, нажав и удерживая кнопку "Домой", то первое занятие обновит его данные.
Если это то, что вы хотите, то вы делаете это правильно.
Если вы хотите, чтобы первое действие обновлялось только при нажатии кнопки "Обновить" во втором упражнении, вам необходимо использовать это намерение. Одним из способов будет добавление логического дополнения к вашему намерению:
i.putExtra("reloadContent", true);
Затем проверьте это дополнительно в методе onStart.
Я могу сделать это, установив флаги для вашего намерения попробуйте, как показано ниже, перейдите через другие флаги
Intent i = new Intent();
i.setClass(this, Rss_Feed.class);
// i.setClass(Rss_Feed.this, Bru_Maps.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);