Сортировка Android ListView - PullRequest
       6

Сортировка Android ListView

6 голосов
/ 14 апреля 2010

Я только начинаю с Android dev, и хотя Milestone - отличное устройство, Java не является моим естественным языком, и я борюсь как с документами Google по Android SDK, так и с Eclipse и самой Java. Во всяком случае ...

Я пишу клиент микроблога для Android вместе с моим клиентом Windows (MahTweets). На данный момент у меня есть твиты приходят и уходят в обязательном порядке, проблема с пользовательским интерфейсом.

При первом вызове элементы будут упорядочены правильно (как в порядке убывания)

  • 3
  • 2
  • 1

Когда производится обновление

  • 3
  • 2
  • 1
  • 6
  • 5
  • 4

После обработки твитов я звоню adapter.notifyDataSetChanged(); Изначально я думал, что getItem () на адаптере нужно отсортировать (и вот код, который я получил в итоге), но мне все еще не повезло.

public class TweetAdapter extends BaseAdapter
{
private List<IStatusUpdate> elements;
private Context c;
public TweetAdapter(Context c, List<IStatusUpdate> Tweets)
{
    this.elements = Tweets;
    this.c = c;
}
public int getCount() {

    return elements.size();
}
public Object getItem(int position) {
    Collections.sort(elements, new IStatusUpdateComparator());
    return elements.get(position);
}
public long getItemId(int id) {
    return id;
}
public void Remove(int id)
{   
    notifyDataSetChanged();
}
public View getView(int position, View convertView, ViewGroup parent) 
{
    RelativeLayout rowLayout;
    IStatusUpdate t = elements.get(position);
            rowLayout = t.GetParent().GetUI(t, parent, c);
    return rowLayout;
}

class IStatusUpdateComparator implements Comparator
{
    public int compare(Object obj1, Object obj2)
    {
        IStatusUpdate update1 = (IStatusUpdate)obj1;
        IStatusUpdate update2 = (IStatusUpdate)obj2;
        int result = update1.getID().compareTo(update2.getID());

        if (result == -1)
        return 1;
        else if (result == 1)
        return 0;
        return result;
    }
}
}

Есть ли лучший способ сортировки ListViews в Android, но при этом возможность использовать LayoutInflater? (rowLayout = t.GetParent().GetUI(t, parent, c) расширяет пользовательский интерфейс до конкретного представления, которое может обеспечить реализация микроблога)

1 Ответ

14 голосов
/ 14 апреля 2010

Я бы не рекомендовал сортировать базовый список в getItem (), по моему мнению, метод get .. () должен быть «идемпотентным» и не оказывать какого-либо внешне видимого влияния на состояние его родителя.

В случае вашей проблемы я бы решил ее в тот момент, когда твиты добавляются в контейнер. Вы не включили эту часть исходного кода приложения, но, вероятно, вы используете ArrayList. Возможно, вы запрашиваете в Twitter API список твитов, упорядоченных за последнее время, и вызываете add () для вашего ArrayList для каждого результата, что добавляет твиты в конец списка.

Знаете ли вы, что вы можете в любой момент вставить в ArrayList? Я бы порекомендовал перевернуть , перебирая результаты из API Twitter и вставляя каждый результат в верхнюю часть вашего ArrayList с помощью add (0, ....), а не добавляя его в конец списка.

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