#android
#Android
Вопрос:
Я работаю над обновлением списка в Android, но, похоже, не могу сделать это правильно.
Я использовал notifyDataSetChanged (); в каждом пункте, который я считал применимым (в настоящее время используя диалоги для ввода), но это не работает, и я дошел до того, что разбросал его повсюду, и он все равно не обновляется.
Прав ли я, говоря, что это должно обновить список, пока вы смотрите на него, или он перестроит список, и вам все равно придется обновлять представление?
Если у кого-нибудь есть какие-либо предложения по его размещению в связи с построением списка, я был бы рад услышать.
Комментарии:
1. Вы меняете сам адаптер или какой-то массив, который вы использовали для создания адаптера?
Ответ №1:
Является ли это ListActivity? На данный момент в моем проекте есть ListActivity, и внутри него у меня есть собственный класс адаптера, который расширяет ArrayAdapter.
По моему опыту, вызов notifyDataSetChanged () в моем экземпляре класса extended list adapter немедленно вызывает обновление отображаемого представления списка. Итак, как только я вызываю .notifyDataSetChanged() в моем экземпляре адаптера, представление списка восстанавливается, что, следовательно, вызывает реализацию getView () моего адаптера для повторного создания каждого отдельного представления строки. Итак, пользователь выбирает пункт контекстного меню, который вызывает некоторое изменение данных, а затем вызывает .notifyDataSetChanged(), и экран мгновенно обновляется новыми данными.
Итак, чтобы добавить некоторые фрагменты кода, чтобы было понятно:
У меня есть ListActivity
public class VarListActivity extends ListActivity {
Внутри него я расширяю ArrayAdapter
class VarAdapter extends ArrayAdapter{
...
@Override
public View getView(int position, View convertView, ViewGroup parent){
// Creates the views based upon myData
...
@Override
public int getCount(){
...
И я создаю экземпляр этого адаптера массива
la = new VarAdapter(this, R.layout.row0);
И когда выбран пункт контекстного меню
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.a_context_menu_option:
// Does a call to perform modifications to myData
la.notifyDataSetChanged();
return true;
Я просто отбрасываю все это на всякий случай, если это имеет какое-либо сходство с вашей ситуацией, но на самом деле нам нужно узнать немного больше о вашем коде.