2012-04-08 16 views
0

私はActivityを持っています。これは単純に一覧表示のPair<String, String>オブジェクトで構成されています。ListViewで要素の位置を強制的に設定するには

パブリックビューgetViewメソッド(INT位置、表示convertView、のViewGroup親) {

View view; 
    if (convertView == null) 
    { 

     LayoutInflater li = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     view = li.inflate(R.layout.text_sub, null); 

     TextView tv = (TextView)view.findViewById(R.id.mainText); 
     tv.setText(mCategories.get(position).first); 

     TextView desc = (TextView)view.findViewById(R.id.subText); 
     desc.setText(Html.fromHtml(mCategories.get(position).second)); 


    } 
    else 
    { 
     view = (View) convertView; 
    } 
    return view; 

}

mCategories ArrayList<Pair<String, String>>

である:私はArrayAdapterを拡張カスタム TextWithSubTextAdapterは、持っています

lv.setAdapter(new TextSubTextAdapter(this, Common.physConstants)); 私は要素のセットが限られている限り、スクロールする必要がないので、うまく動作します。

Normal viewAll hell breaks loose

私はこの振る舞いは私がmCategories.get(position)を呼び出すことによるものであることを疑う:私は十分な要素を追加する場合ただし、スクロールした後、項目は次のように、自分の位置を入れ替えます。ビューはバックグラウンドで保持されることはなく、Androidは毎回それらを再生成するので、positionはめったに同じ値を持たないため、同じアイテムを取得することはありません。

固定IDを取得する方法はありますか?固定位置のアイテムを取得する方法はありますか? getItemIDを使用しようとしましたが、実装する方法がわかりません。

注:すべての文字列はstrings.xmlファイルに含まれています。それらは比較されず、スタートアップ時に一度インスタンス化されます。

答えて

1

あなたのリストをスクロールすると、Androidは画面からスクロールするビューを動的に再利用します。これらのconvertViewsにはまだこの位置にあるコンテンツはありません。手動で設定する必要があります。

View view; 
    if (convertView == null) 
    { 
     LayoutInflater li = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     view = li.inflate(R.layout.text_sub, null); 
    } 
    else 
    { 
     view = convertView; 
    } 
    TextView tv = (TextView)view.findViewById(R.id.mainText); 
    tv.setText(mCategories.get(position).first); 

    TextView desc = (TextView)view.findViewById(R.id.subText); 
    desc.setText(Html.fromHtml(mCategories.get(position).second)); 

    return view; 
+0

概念がFlyweightパターンと呼ばれているが、興味のある人のために:http://en.wikipedia.org/wiki/Flyweight_pattern – Patrick

+0

確かに、ありがとうございました。私はビューがリサイクルされていることは分かっていましたが、どこでも見てきましたが、頭の中で私を打つ。 – pikzen

関連する問題