我想做这样的事情。
按下刷新按钮时,它将刷新列表。活动代码如下:
adapter = new TweetAdapter(Welcome.this, tweets, users);
tweetsList.setAdapter(adapter);
private void refreshAdapter() {
adapter.clear();
adapter.refresh(tweets, users);
}
当我需要更改列表项时, refreshAdapter()
被调用。这里tweets
& users
是ArrayList
& HashMap
项目
和适配器部分是这样的:
public void clear() {
this.tweets.clear();
this.users.clear();
}
public void refresh(ArrayList<Tweet> tweets, HashMap<String, User> users) {
this.tweets.addAll(tweets);
this.users.putAll(users);
Collections.sort(this.tweets, new TweetTimeComparator());
notifyDataSetChanged();
}
但遗憾的是notifyDataSetChanged();
无效。通过单击刷新,列表变为黑色(最长时间)或没有响应(某个时间)。
如果您发现错误或建议我该怎么做,请告诉我。
答案 0 :(得分:1)
我认为你正在清理数据
this.tweets.clear();
this.users.clear();
.. 我认为由于推文和用户都具有相同的重新发布(从活动传递到适配器),因此推文和两个用户(在适配器和活动上都指向相同的ArrayLists)所以两者都是清晰的,所以这两行都没有意义是空的
this.tweets.addAll(tweets);
this.users.putAll(users);
尝试
public TweetAdapter(Context context, ArrayList<Tweet> tweets, HashMap<String, User> users) {
mInflater = LayoutInflater.from(context);
this.tweets = new ArrayList<Tweet>();
this.users = new HashMap<String, User>();
this.tweets.addAll(tweets);
this.users.putAll(users);
Collections.sort(this.tweets, new TweetTimeComparator());
}
...
public void refresh(ArrayList<Tweet> tweets, HashMap<String, User> users) {
this.tweets.clear();
this.users.clear();
this.tweets.addAll(tweets);
this.users.putAll(users);
Collections.sort(this.tweets, new TweetTimeComparator());
notifyDataSetChanged();
}
但请注意:现在引用两条推文(在适配器和活动上),两个用户(在适配器和活动上)都不同。
不应该像adapter.tweets = activity.tweets那样直接赋值任何其他地方使用this.tweets.addAll(tweets);