Обновление списка Android

#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;
  

Я просто отбрасываю все это на всякий случай, если это имеет какое-либо сходство с вашей ситуацией, но на самом деле нам нужно узнать немного больше о вашем коде.