0

オブジェクトを一覧表示するだけのアクティビティがありPair<String, String>ます。TextWithSubTextAdapterArrayAdapterを拡張するカスタムがあります。

public View getView(int position、View convertView、ViewGroup parent){

  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>>

次にlv.setAdapter(new TextSubTextAdapter(this, Common.physConstants)); 、要素のセットが限られている限り、スクロールする必要がないので、うまく機能します。ただし、十分な数の要素を追加すると、スクロールした後、次のようにアイテムの位置が入れ替わります。

通常のビューすべての地獄が解き放たれる

この動作は、私が。を呼び出したことが原因であると思われますmCategories.get(position)。ビューがバックグラウンドで保持されることはなく、Androidが毎回ビューを再生成するためposition、同じ値が表示されることはめったにないため、同じアイテムを取得することはありません。

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

注:すべての文字列はstrings.xmlファイルから取得されます。それらは、起動時に比較されたり、一度インスタンス化されたりすることはありません。

4

1 に答える 1

1

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

  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;
于 2012-04-08T14:46:46.203 に答える