一千萬個為什麽

搜索

排序Android ListView

我只是從Android開發開始,雖然Milestone是一個不錯的設備,Java不是我的自然語言,我在Android SDK,Eclipse和Java本身的Google文檔上都很掙紮。無論如何...

我正在為Android編寫一個微博客戶端,以配合我的Windows客戶端(MahTweets)。目前我的推文一直在進行,但問題出在UI上。

初始調用將正確訂購商品(從最高到最低)

  • 3
  • 2
  • 1

刷新時

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

在處理推文之後,我正在調用 adapter.notifyDataSetChanged(); 最初我認為適配器上的getItem()需要排序(下面的代碼是我最終得到的),但我仍然沒有運氣。

public class TweetAdapter extends BaseAdapter
{
private List elements;
private Context c;
public TweetAdapter(Context c, List 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;
    }
}
}

有沒有更好的方法來在Android中排序ListViews,同時仍然能夠使用LayoutInflater? ( rowLayout = t.GetParent()。GetUI(t,parent,c)將UI擴展到微博實現可以提供的特定視圖)

最佳答案

我不建議在getItem()中對基礎列表進行排序,在我看來,get ...()方法應該是'idempotent'並且對其父級的狀態沒有任何外部可見的影響。

如果您遇到問題,我會在將推文添加到容器中的時候解決它。您尚未包含此部分應用源,但您似乎可能正在使用ArrayList。也許您正在查詢Twitter API以獲取最近訂購的推文列表,並在您的ArrayList上為每個結果調用add(),這是將推文添加到列表的底部。

您是否知道可以隨時插入ArrayList?我建議反向叠代來自Twitter API的結果,並使用add(0,....)將每個結果插入到ArrayList的頂部,而不是添加到列表的後面。

轉載註明原文: 排序Android ListView