2011-01-25 67 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()。