我只是从 Android 开发开始,虽然 Milestone 是一个不错的设备,但 Java 不是我的自然语言,而且我在 Android SDK、Eclipse 和 Java 本身的 Google 文档上遇到了困难。反正...
我正在为 Android 编写一个微博客户端,以配合我的 Windows 客户端 (MahTweets)。目前我的推文毫无疑问地来来去去,问题出在用户界面上。
初始调用将正确排序项目(如从最高到最低)
当进行刷新时
处理完推文后,我会打电话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 中的 ListView 进行排序,同时仍然能够使用 LayoutInflater? (rowLayout = t.GetParent().GetUI(t, parent, c)
将UI扩展到微博实现可以提供的特定视图)
我不建议对 getItem() 中的底层列表进行排序,在我看来, get..() 方法应该是“幂等”的,并且不会对其父级状态产生任何外部可见的影响。
对于您的问题,我会在将推文添加到容器中时解决它。您尚未将这部分包含在应用程序源代码中,但您似乎正在使用 ArrayList。也许您正在查询 Twitter API 以获取最近排序的推文列表,并为每个结果调用 ArrayList 上的 add() ,这会将推文添加到列表的底部。
您知道可以在任意位置插入 ArrayList 吗?我会推荐reverse迭代来自 Twitter API 的结果,并使用 add(0, ....) 将每个结果插入到 ArrayList 的顶部,而不是添加到列表的后面。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)