java – 排序Android ListView

前端之家收集整理的这篇文章主要介绍了java – 排序Android ListView前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我只是从 Android dev开始,虽然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<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;
    }
}
}

有没有更好的方法来在Android中排序ListViews,同时仍然能够使用LayoutInflater? (rowLayout = t.GetParent().GetUI(t,c)将UI扩展到微博实现可以提供的特定视图)

解决方法

我不建议在getItem()中对基础列表进行排序,在我看来,get …()方法应该是’idempotent’并且对其父级状态没有任何外部可见的影响.

如果您遇到问题,我会在将推文添加到容器中的时候解决它.您尚未包含此部分应用源,但您似乎可能正在使用ArrayList.也许您正在查询Twitter API以获取最近订购的推文列表,并在您的ArrayList上为每个结果调用add(),这会将推文添加到列表的底部.

您是否知道可以随时插入ArrayList?我建议反向迭代来自Twitter API的结果,并使用add(0,….)将每个结果插入到ArrayList的顶部,而不是添加到列表的后面.

猜你在找的Android相关文章