for循环中的for循环 - ListArrays - Android,Java!

时间:2011-01-25 10:09:08

标签: java android listview

这是一个菜鸟问题,但无论如何我都要问它,因为我想我很快就会发疯。

我想要实现的是ListView,它由twitter填充,我已经实现了,这两个ListArray由推文和图片网址填充。 这是成功的,但是当我刷新推特时,新的推特会低于旧版本。

我可以简单地清除ListArrays但是然后所有的twitter都会在列表中消失,这是不可取的,我只是想添加新的推文,并让新的推文在列表之上。

所以我想这是一个双重问题

  1. 如何仅列出要添加的列表 哪个不存在?,
  2. 如何制作最新推文 出现在最上面?
  3. 真的可以使用一些很棒的输入,下面的代码是(凌乱)代码中最重要的部分,也就是刷新方法。

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

3 个答案:

答案 0 :(得分:2)

创建一个从BaseAdapter扩展的适配器并调用notifyDataSetChanged()。

答案 1 :(得分: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 :(得分: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数组之间的关系,你就应该只需更新数组并通知适配器。