0

こういうことをしたいです。

更新ボタンを押している間、リストが更新されます。アクティビティコードは次のとおりです。

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


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

refreshAdapter()リストアイテムを変更する必要があるときに呼び出されます。here tweetsusersare ArrayListHashMapitems

アダプター部分は次のようになります。

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

..ツイートとユーザーの両方が同じrefreance(アクティビティからアダプターに渡される)を持っていると思うので、両方のツイートと両方のユーザー(アダプターとアクティビティーが同じArrayListを指している)なので、両方が明確になるため、これらの行は意味がありませんどちらも空なので

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 any のような直接の代入はすべきではありません。

于 2012-06-27T14:42:07.627 に答える