数组适配器中的反向列表顺序

Reverse List Order in Array Adapter

如何修改此代码,以便将每个新对象添加到列表的顶部而不是底部?我希望将最新的对象添加到列表的最顶部,以便您在列表中向下滚动时看到较旧的对象。

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;

}

}

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

Inserts the specified element at the specified position in this list (optional operation). Shifts the element currently at that position (if any) and any subsequent elements to the right (adds one to their indices).

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

您可以按照您喜欢的顺序对传递给适配器的列表进行排序,以查看列表中的项目。

public static void sort (List<T> list, Comparator<? super T> comparator)

Ref

如果你想以相反的顺序显示列表,最新的项目在顶部,那么只需反转你的 list.Java 集合 class 提供一个反转方法,反转下面代码中的 list.See 中的所有项目-

Collections.reverse(aList);

以上代码反转列表项并将结果存储在同一个列表中。

希望对您有所帮助。

试试这个方法来颠倒你的列表顺序,我还没有测试过,但它应该有效。

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 中的任何内容 class,在您初始化 StatusAdapter 的地方调用上面的函数。

Usage:

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