如何修改此代码,以便将每个新对象添加到列表顶部而不是底部?我希望将最新的对象添加到列表的最顶部,以便在列表中向下滚动时看到较旧的对象。
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;
}
}
答案 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)