2012-06-27 39 views
0

我想要做這樣的事情。通過notifyDataSetChanged()修改/黑屏;

同時按刷新按鈕,它會刷新列表。活動代碼是這樣的:

 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();不工作。通過點擊刷新該列表要麼變黑(最大時間),要麼沒有響應(某個時間)。

請告訴我,如果你發現錯誤或建議我該怎麼做。

回答

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

但要注意:現在,參照上述兩個鳴叫(在適配器和活動)和兩個用戶(在適配器和活動)是不同的。

不應該像adapter.tweets = activity.tweets這樣的任何地方使用this.tweets.addAll(tweets);

+0

那麼該怎麼辦? this.users.clear();不是太重要,因爲我可以使用舊的用戶設置,但this.tweets.clear();對於刷新新推文很重要。 –

+0

首先想看到你的適配器上的構造,以確認所有... –

+0

'公共TweetAdapter(上下文的背景下,ArrayList的鳴叫, \t \t \t的HashMap <字符串,用戶>用戶){ \t \t mInflater = LayoutInflater.from(上下文); \t \t this.tweets = tweets; \t \t this.users = users; \t \t Collections.sort(this.tweets,new TweetTimeComparator()); \t}' –