没有变化/黑色屏幕由notifyDataSetChanged();(no change/black

2019-07-30 04:03发布

我想要做这样的事情。

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

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


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

refreshAdapter()调用的时候,我需要改变的列表项。 这里tweetsusersArrayListHashMap项目

和接头部分是这样的:

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(); 不管用。 通过单击刷新列表要么变成黑色(最长时间)或没有响应(一些时间)。

请告诉我,如果你发现错误,或者建议我做什么。

Answer 1:

我认为你正在清理数据

this.tweets.clear();
this.users.clear();

..我觉得作为微博和用户都具有相同的refreance(从活动到适配器通过),所以两者的鸣叫和两个用户(在适配器和活动都指向相同的ArrayList),所以都是GET-清楚,所以这行没有意义因为二者都是空

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(微博);



文章来源: no change/black screen by notifyDataSetChanged();