2011-01-25 66 views
1

這是一個小菜鳥問題,但我必須問它,因爲我認爲我很快就會發瘋。For循環內的For循環 - ListArrays - Android,Java!

我想要實現的是一個ListView,它由twitter和我已經實現的這兩個ListArray由tweet和圖片URL填充。 這是成功的,但是當我刷新twitter時,新的一堆twitter會低​​於舊的。

我可以簡單地清除ListArrays,但然後所有的Twitter消失在列表中,這是不可取的,我只想添加只有新的推文,並使新的推文獲得列表頂部。

所以我想這是一個雙重的問題

  1. 如何讓我的列表只添加 這是不是有?和
  2. 如何讓最新的tweet 出現在頂部?

實際上可以使用一些很好的輸入,下面的代碼是(雜亂)代碼中最重要的部分,它是刷新方法。

public void updateTwitter(){ 

     twitter = new TwitterFactory().getInstance(); 

     try { 
      QueryResult result = twitter.search(new Query(TWEETQUERY)); 
      tweets = result.getTweets(); 
      for (Tweet tweet : tweets) { 
       String tweetProfile = tweet.getProfileImageUrl(); 
       String twwwwww = tweet.getText(); 
       for(String tww : tweetString){ 

        if(tww.equals(twwwwww)){ 
         System.out.println("Not added"); 
        } else { 
         tweetString.add(twwwwww); 
         urlArray.add(tweetProfile); 
        } 
       } 
      } 
      if(adapter != null) { 
       tweetList.setAdapter(adapter); 
       System.out.println("adapter sets, not created"); 
      } else { 
       adapter = new LazyAdapter(this, urlArray, tweetString); 
       tweetList.setAdapter(adapter); 
      } 
     } catch (TwitterException te) { 
      te.printStackTrace(); 
      System.out.println("Failed to search tweets: " + te.getMessage()); 
     } 
    } 

回答

1

大概LazyAdapter派生自BaseAdapter並支持urlArray。如果是這樣,要在上方顯示推文,則需要將它們添加到數組的開頭。

使用add(0, newEntry)add to the beginning of the arraynotifyDataSetChanged()tell the adapter to post the updates

一對夫婦的其他注意事項:

1)它我不清楚你想要什麼,尤其是看到像twww.equals(twwwwwww)代碼。看起來你似乎在維護舊的推文,並試圖只添加新的推文,但是像twww, twwwwww, and tweetString這樣的變量名稱不清晰,我只能猜測。

2)您不必一直設置適配器。一旦設置了listview,adapter和backing數組之間的關係,您只需更新數組並通知適配器。

+0

當然你是對的,這些變量的名稱至少是令人困惑的,但我真的很累,而且我的命名規則的智商下降了。 應該發佈一個更清晰的例子對此感到抱歉。 但我當然不應該一直設置適配器,我們的建議非常有意義。 –

+0

@Joakim - 我自己在許多夜晚患上了深夜的智商下降。 :0 –

1

這聽起來像你真的想要一套,而不是一個列表,並能夠根據一些標準來遍歷它(時間增加,在這種情況下)。 也許SortedSet將是適當的?

的實施將是這樣的:

/* SortedSet<Tweet> tweets defined somewhere above, possibly with a custom Comparator */ 

public void updateTwitter() 
{ 
    try 
    { 
     tweets.addAll(TwitterFactory.getInstance().search(query).getTweets()); 
    } catch (TwitterException te) { 
     te.printStackTrace(); 
     System.out.println("Failed to search tweets: " + te.getMessage()); 
    } 
} 
2

請從BaseAdapter延伸的適配器,並調用notifyDataSetChanged()。