在数组适配器中反转列表顺序

12

我该如何修改这段代码,使得每个新对象添加到列表顶部而不是底部?我希望最新的对象被添加到列表的非常顶部,这样当您向下滚动列表时,就会看到较旧的对象。

public class StatusAdapter extends ArrayAdapter {
protected Context mContext;
protected List<ParseObject> mStatus;

public StatusAdapter(Context context, List<ParseObject> status) {
    super(context, R.layout.homepage, status);
    mContext = context;
    mStatus = status;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    if (convertView == null) {
        convertView = LayoutInflater.from(mContext).inflate(
                R.layout.homepage, null);
        holder = new ViewHolder();
        holder.usernameHomepage = (TextView) convertView
                .findViewById(R.id.usernameHP);
        holder.statusHomepage = (TextView) convertView
                .findViewById(R.id.statusHP);

        convertView.setTag(holder);
    } else {

        holder = (ViewHolder) convertView.getTag();

    }

    ParseObject statusObject = (ParseObject)mStatus.get(position);

    // title
    String username = statusObject.getString("newUser") + ":";
    holder.usernameHomepage.setText(username);

    // content
    String status = statusObject.getString("newStatus");
    holder.statusHomepage.setText(status);

    return convertView;
}

public static class ViewHolder {
    TextView usernameHomepage;
    TextView statusHomepage;

}

}
4个回答

23
如果您想要倒序显示列表,将最新的项目放在顶部,则只需反转您的列表。Java集合类提供了一个reverse方法,可以反转列表中的所有项目。请参见以下代码 - Collections.reverse(aList); 上述代码将反转列表项并将结果存储在同一列表中。
希望这可以帮到您。

5
每个List接口的具体实现都定义了void add(int index, E element)方法。

在此列表中指定位置插入指定元素(可选操作)。将当前位于该位置的元素(如果有)和任何后续元素向右移动(将它们的索引加1)。

因此,您可以使用add(0,item)方法,然后通知数据集已更改。这将使您新添加的项出现在顶部而不是底部。

...或者只需使用adapter.insert(item,0) - Kodak

2
尝试使用此方法来反转您的列表顺序,我尚未测试过,但应该可以正常工作。
private List<ParseObject> reverseListOrder(List<ParseObject> status)
{
    Iterator<ParseObject> it = status.iterator();
    List<ParseObject> destination = new ArrayList<>();
    while (it.hasNext()) {
        destination.add(0, it.next());
        it.remove();
    }
    return destination;
}

不需要更改您的StatusAdapter类,只需在您初始化StatusAdapter的位置调用上述函数即可。

用法:

StatusAdapter adapter = new StatusAdapter(this, R.layout.item, reverseListOrder(listOfStatus));
listView.setAdapter(adapter);

1
你可以按照自己想要的顺序对传递给适配器的列表进行排序,以便在列表中查看项目。
public static void sort (List<T> list, Comparator<? super T> comparator)

Ref

可以直译为“

{{链接1:参考}}

”,保留了HTML格式,其中的“link1”和“Ref”可能是编程中使用的变量或参数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接