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()需要排序(下面的代码是我最终得到的),但我仍然没有运气.

  1. public class TweetAdapter extends BaseAdapter
  2. {
  3. private List<IStatusUpdate> elements;
  4. private Context c;
  5. public TweetAdapter(Context c,List<IStatusUpdate> Tweets)
  6. {
  7. this.elements = Tweets;
  8. this.c = c;
  9. }
  10. public int getCount() {
  11.  
  12. return elements.size();
  13. }
  14. public Object getItem(int position) {
  15. Collections.sort(elements,new IStatusUpdateComparator());
  16. return elements.get(position);
  17. }
  18. public long getItemId(int id) {
  19. return id;
  20. }
  21. public void Remove(int id)
  22. {
  23. notifyDataSetChanged();
  24. }
  25. public View getView(int position,View convertView,ViewGroup parent)
  26. {
  27. RelativeLayout rowLayout;
  28. IStatusUpdate t = elements.get(position);
  29. rowLayout = t.GetParent().GetUI(t,parent,c);
  30. return rowLayout;
  31. }
  32.  
  33. class IStatusUpdateComparator implements Comparator
  34. {
  35. public int compare(Object obj1,Object obj2)
  36. {
  37. IStatusUpdate update1 = (IStatusUpdate)obj1;
  38. IStatusUpdate update2 = (IStatusUpdate)obj2;
  39. int result = update1.getID().compareTo(update2.getID());
  40.  
  41. if (result == -1)
  42. return 1;
  43. else if (result == 1)
  44. return 0;
  45. return result;
  46. }
  47. }
  48. }

有没有更好的方法来在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相关文章