カスタムアダプターでリストビューを作成しました。5 つのテキストビュー、1 つのチェックボックス、1 つのボタンがあります。
-------------------------------------
<TextView>
<TextView> <checkbox>
<TextView>
<TextView> <button>
<TextView>
-------------------------------------
リスト内のテキストビューを設定するために使用している配列リストには、適切な一意のデータがあります。しかし、リストビューは最初の 4 つから 5 つの値のみを取得し、リストの残りの部分でそれを繰り返します。
また、スクロールすると、表示される値が自動的に変わります。たとえば、アイテム A が最初の位置に表示されました。そのため、下にスクロールして再度上に移動すると、項目 C または項目 D が表示されます。
それは本当に私を混乱させます!助けてください!
カスタム アダプター コード
protected class MyCustomAdapter extends ArrayAdapter<String>
{
int len;
private SparseBooleanArray mCheckStates;
private SparseBooleanArray favourites;
ArrayList<String> myMake, myModel, myVer, myPrice, myPlace, sellr_pos;
int count = 0;
ViewHolder holder = null;
Boolean status;
public MyCustomAdapter(Context context, int textViewResourceId,
ArrayList<String> car_make, ArrayList<String> car_model,
ArrayList<String> car_version, ArrayList<String> car_price,
ArrayList<String> car_place, ArrayList<String> sellr_pos) {
super(context, textViewResourceId);
mCheckStates = new SparseBooleanArray(car_model.size());
favourites = new SparseBooleanArray(car_model.size());
myMake = car_make;
myModel = car_model;
myVer = car_version;
myPrice = car_price;
myPlace = car_place;
}
private class ViewHolder {
TextView txt1, txt2, txt3, txt4, txt5;
CheckBox chkbox;
Button btn_fav;
}
@Override
public int getCount() {
return myMake.size();
}
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
if (convertView == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.text_adaptr, null);
holder = new ViewHolder();
holder.txt1 = (TextView) convertView.findViewById(R.id.text1);
holder.txt2 = (TextView) convertView.findViewById(R.id.text5);
holder.txt3 = (TextView) convertView.findViewById(R.id.text3);
holder.txt4 = (TextView) convertView.findViewById(R.id.text4);
holder.txt5 = (TextView) convertView.findViewById(R.id.text2);
System.out.println("ListView position: " + position);
holder.txt1.setText(myMake.get(position));
holder.txt2.setText(myModel.get(position));
holder.txt3.setText(myVer.get(position));
holder.txt4.setText(myPrice.get(position));
holder.txt5.setText(myPlace.get(position));
holder.chkbox = (CheckBox) convertView
.findViewById(R.id.checkBox1);
holder.btn_fav = (Button) convertView.findViewById(R.id.fav);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.chkbox.setTag(position);
holder.chkbox.setChecked(mCheckStates.get(position, false));
if (favourites.get(position, false)) {
holder.btn_fav.setBackgroundResource(R.drawable.star);
} else {
holder.btn_fav.setBackgroundResource(R.drawable.star_grey);
}
len = fav_ids.size();
System.out.println("FAV_IDS len:" + len);
for (int t = 0; t < len; t++) {
String pos_id = pos.get(position).trim();
String fav_id = fav_ids.get(t).trim();
if (pos_id.equals(fav_id)) {
holder.btn_fav.setBackgroundResource(R.drawable.star);
break;
} else {
holder.btn_fav.setBackgroundResource(R.drawable.star_grey);
}
}
holder.chkbox.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Do something
}
});
holder.btn_fav.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Do something
}
});
return convertView;
}
}