0

我想做这样的事情。

按下刷新按钮时,它将刷新列表。活动代码是这样的:

        adapter = new TweetAdapter(Welcome.this, tweets, users);
        tweetsList.setAdapter(adapter);


    private void refreshAdapter() {
        adapter.clear();
        adapter.refresh(tweets, users);
    }

refreshAdapter()当我需要更改列表项时调用。这里tweets&usersArrayList&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();的是不工作。通过单击刷新列表要么变黑(最长时间)或没有响应(一段时间)。

如果您发现错误或建议我该怎么做,请告诉我。

4

1 回答 1

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();
}

但注意:现在引用两个推文(在适配器和活动上)和两个用户(在适配器和活动上)是不同的。

在其他使用 this.tweets.addAll(tweets); 的地方不应该有像 adapter.tweets = activity.tweets 这样的直接赋值

于 2012-06-27T14:42:07.627 回答