阵列适配器中的反向列表顺序

时间:2015-05-12 03:26:05

标签: android android-studio android-arrayadapter

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

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 个答案:

答案 0 :(得分:16)

如果你想以反向顺序显示最新项目列表,那么只需反转你的list.Java集合类提供一个反向方法,它可以反转列表中的所有项目。参见下面的代码 -

Collections.reverse(aList);

上面的代码反向列出项目并将结果存储在同一个列表中。

希望它会对你有所帮助。

答案 1 :(得分:3)

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

  

将指定元素插入此列表中的指定位置   (可选操作)。移动当前位于该位置的元素   (如果有的话)和右边的任何后续元素(在他们的   指数)。

因此,您可以#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct wordNode NODE; struct wordNode { char *word; char *nextWord; NODE *next; }; NODE *head = NULL; NODE *tail = NULL; NODE* createList(char*, char*); NODE* addToList(char*, char*); void printList(void); int main(void) { char input[2048]; char *userWord, *firstWord, *nextWord; gets(input); userWord = strtok(input, " .,!?;:"); while(userWord != NULL) { firstWord = userWord; userWord = strtok(NULL, " .,!?;:"); nextWord = userWord; addToList(firstWord, nextWord); } printList(); return 0; } NODE* createList(char* word, char* nextWord) { NODE *ptr = malloc(sizeof(NODE)); if(ptr == NULL) { /*node creation failde*/ return NULL; } ptr->word = malloc((strlen(word) + 1)*sizeof(char)); ptr->nextWord = malloc((strlen(nextWord) + 1)*sizeof(char)); ptr->word = strdup(word); ptr->word = strdup(nextWord); ptr->next = NULL; head = tail = ptr; return ptr; } NODE* addToList(char* word, char* nextWord) { if(head == NULL) { return createList(word, nextWord); } NODE *ptr = malloc(sizeof(NODE)); if(ptr == NULL) { /*node creation failed*/ return NULL; } ptr->word = malloc((strlen(word) + 1)*sizeof(char)); ptr->nextWord = malloc((strlen(nextWord) + 1)*sizeof(char)); ptr->word = strdup(word); ptr->word = strdup(nextWord); ptr->next = NULL; tail->next = ptr; tail = ptr; return ptr; } void printList(void) { NODE *ptr = head; while(ptr != NULL) { printf("\n--%s----%s--\n", ptr->word, ptr->nextWord); ptr = ptr->next; } } 然后通知您的数据集已更改。这将使您新添加的项目显示在顶部而不是底部。

答案 2 :(得分: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);

答案 3 :(得分:1)

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

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

Ref