2011-01-25 26 views
1

これはノブの質問ですが、とにかく私はすぐにクレイジーに行くと思うので、私はそれを尋ねなければなりません。Forループ内のForループ - ListArrays - Android、Java!

私が達成したいのは、ListViewです。この投稿はtwitterで作成されていますが、これは実装しました.2つのListArrayにはツイートと画像のURLが入力されます。 これは成功ですが、私がツイッターをリフレッシュすると、新しいツイッターが古いものより下になります。

ListArraysをクリアするだけでリスト内のすべてのツイッターが消えてしまいます。これは望ましくないので、新しいツイートを追加して新しいツイートをリストの上に置きたいだけです。

だから私は、これが2倍に質問

  1. どのように私はそこにされていない を追加するために、リストを作るのですか?、と
  2. がどのように最新のつぶやき が一番上に表示されるI作るんだと思います?

実際にはいくつかの素晴らしい入力を使用できます。下のコードは、リフレッシュ方法である(乱雑な)コードの最も重要な部分です。

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 arrayおよびnotifyDataSetChanged()からtell the adapter to post the updatesを使用してください。

他のノートのカップル:

1)あなたは、特にtwww.equals(twwwwwww)ようなコードを見て、予定のものを私にその不明確。あなたが古いツイートを維持しているだけで、新しいものを追加しようとしているようですが、わかりやすい変数名twww, twwwwww, and tweetStringがあります。

2)アダプタの設定を続ける必要はありません。リストビュー、アダプタ、およびバッキングアレイの関係が設定されたら、配列を更新してアダプタに通知するだけで済みます。

+0

もちろん、そういう変数の名前はちょっと言っても紛らわしいですが、私は本当に疲れていて、IQの命名規則はダウンしました。 もう少しクリーンな例を投稿してください。 もちろん、アダプターの設定を続ける必要はありません。私たちの提案は理にかなっています。 –

+0

@ジョアキム - 私は多くの夜に深夜のIQを落とします。 :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:

実装は、このようなものになるだろう。