Android ListAdapter или, возможно, ListView Обновление текста во время выполнения - PullRequest
0 голосов
/ 30 сентября 2011

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

У меня есть простой ListView , который отображает массив объектов String с помощью ListAdapter .

Мне нужно обновить некоторые из ListView строк во время выполнения, основываясь на их содержимом. Используя глобальную ссылку на адаптер списка, используемый при создании представлений списков, я могу получить содержимое каждой строки представления списка, используя следующий код ниже.

Тем не менее, в дополнение к поиску, я хотел бы иметь возможность изменять каждую строку по очереди, а затем возвращать ее в ту же самую позицию индекса, и чтобы представление списка отражало изменения. Как?

        for (int x = 0; x <= listAdapter.getCount();x++)
        {
            Object o = this.listAdapter.getItem(x);

            if (o.getClass().getSimpleName().equals("String"))
            {
                String s = (String) o;

                  s = modifyString(s);

                //s is the string I want to modify then put back in the same place.

            }//end if
        }//end for

Ответы [ 2 ]

2 голосов
/ 30 сентября 2011

Насколько я знаю, вы не можете изменить элементы в Адаптере - если вы не используете пользовательский Адаптер (путем расширения BaseAdapter и т. Д. ...)

Итак, я думаю, вам придется:

  1. убедитесь, что конструктор адаптера принимает структуру данных, которая содержит ваши строки
  2. убедитесь, что ваша структура данных является глобальной
  3. вносите изменения в эту структуру данных всякий раз, когда вам нужно
  4. вызов myAdapter.notifyDataSetChanged();

Это сообщит адаптеру, что в списке были сделаны изменения, и список должен быть воссоздан.

А после обновления списка вы можете даже вернуть пользователя в индекс:

list.setSelection(positionWhereTheUserClicked);

Надеюсь, это поможет, дайте мне знать, если вам нужно больше ссылок на код.

Вот код

private ArrayList<String> results = new ArrayList<String>();  //global
private BaseAdapter searchAdapter = new BaseAdapter (results, this);  //global

private void updateResults(final ArrayList<String> updatedList){
    results = updatedList;
    final ListView list = (ListView)findViewById(R.id.search_results);
    list.setAdapter(searchAdapter);
    list.setOnItemClickListener(new ListView.OnItemClickListener(){
        // implementation of what happens when you click on an item //
    });
    searchAdapter.notifyDataSetChanged();
}

Этот код отлично работает с моей стороны, надеюсь, он поможет.

0 голосов
/ 12 октября 2011

Просто наткнулся на эту проблему и нашел решение.Я использую

m_ListAdapter = new SimpleAdapter(this, m_List, R.layout.option_list_row, columns, renderTo);

Каждый элемент в моем listView - это опция manu, вызывающая отображение диалогового окна. После получения данных через диалоговое окно все, что мне нужно сделать, это просто создать новый SimpleAdapter собновил ArrayList, включающий новые данные, затем просто установите Adapter на новый адаптер.ListView будет обновляться мгновенно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...