2011-01-17 12 views
6

アイテムのリストをListViewに反復したいとします。以下のコードは、目に見える項目数だけを返すgetChildCount()関数の奇妙な動作のため、すべての項目をリストに反復するのに十分ではありません。AndroidでListViewアイテムを反復する

for (int i = 0; i < list.getChildCount(); i++) { 
    item = (View)list.getChildAt(i); 
    product = (Product)item.getTag(); 
    // make some visual changes if product.id == someProductId 
} 

私の画面は7件の結果が表示され、7つの以上の項目がリストに存在する場合には、それが第八項目またはそうにアクセスすることはできません。..のみ表示項目..

私は反復子を使用すべき代わりに?

ありがとうございました。

+0

アダプターを使用している場合は、リストアダプター – Reno

答えて

1

あなたはあなたのリストアダプタのgetView()方法をカスタマイズして、現在の項目のidが一致するかどうかを確認するためにその中にあなたの小切手を配置する必要があります:

Product product = items.get(position); 
if(product.id == someProductId) { 
    //make visual changes 
} else { 
    //reset visual changes to default to account for recycled views 
} 

通常のみ表示項目のみ、特定の時間にgetViewメソッドを存在するので、もっと見る必要があるときはいつでも呼び出されます。その時点で作成されています。リスト内の現在表示されていない項目からビューをリサイクルするのが一般的です(そのため、条件が一致しない場合に変更をリセットする理由)。

+0

kcoppockのgetCount()メソッドをオーバーライドします。お返事をありがとうございます。これは、私がスクロールするまで、UIの可視部分を更新していないことを除いて、私が期待したとおりに動作します。 UIをリフレッシュするためにトリガーできるイベントはありますか? – pocoa

+1

うん、あなたは 'listView.notifyDatasetChanged();'を呼び出すことができます。それはListAdapterをリフレッシュしますが、スクロールする前でも正しいはずです。各ビューが構築されると、getViewが呼び出されます。 ListAdapterのコードを元の質問に投稿できますか? – kcoppock

+0

ありがとうございました。私は遅くそれを受け入れることはとても残念です。私はすでに私が受け入れたと思った。乾杯。 – pocoa

0

ListView(7)のビュー数はアダプタ内の項目数(7を超える)と異なります。BaseAdapterを使用してみます。

1

だから、@ kcoppockはあなたの最初の問題を解決しました。別の問題があるようです。ビューアイテムを更新するには?アンドロイドSMSアプリケーションは、1つの方法を示しています

< MyListItem android:layout_width=.....> 
... 
</ MyListItem > 
  • とあなたの中に:あなたのリストビュー項目のレイアウトファイル内

    public class MyListItem extends RelativeLayout { 
    ... 
    } 
    

    1. はこのような独自のリストビュー項目を作成しますコードでは、表示アイテムが表示されたときに、データ変更リスナーとしてMyListItemを登録します(データはあなた次第です)。つまり、データが変更されたら、アイテムを直接更新することができます。

    SMSアプリケーションのソースコードを確認してください。