我正在創建一個用於標記「學生」存在或不存在的檢查列表。 我有一個listView創建成功與他們的細節和權利;一個ImageView「X」。當你點擊該行時,「X」變成一個勾號!它成功地改變了我需要這個程序工作的其他東西。影響其他行的onClick onClick
我的問題是「是」,當我將其中一個「打勾」的行向外滾動時,它會恢復爲「X」。我已經使用View Holder解決了這個問題。
我目前的問題是,例如,在一個6名學生名單。如果我「打勾」學生1,學生5也會變爲勾號(儘管不在視野範圍內)。如果我打勾學生2,學生6將打勾。反之亦然。我知道onClick代碼沒有針對「隨機更改的行」執行,因爲儘管被勾選,但這些行未被標記爲「打勾」。這是很奇怪,我,這裏是我的代碼:
ListView listView = (ListView) findViewById(R.id.student_listview);
listView.setBackgroundColor(Color.TRANSPARENT);
listView.setCacheColorHint(Color.TRANSPARENT);
listView.setAdapter(new MySimpleArrayAdapter(this, studentIDarr));
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
ImageView img = (ImageView) view.findViewById(R.id.icon);
if(img.getTag().toString().equals("checked")) {
checkListArr.set(position, "Absent");
img.setImageResource(R.drawable.remove);
img.setTag("unchecked");
} else {
checkListArr.set(position, "Present");
img.setImageResource(R.drawable.checked);
img.setTag("checked");
}
}
});
而且隨着ViewHolder適配器...
static class ViewHolder {
TextView fname;
TextView sname;
TextView ID;
TextView email;
ImageView status;
}
public class MySimpleArrayAdapter extends ArrayAdapter<String> {
private final Context context;
private final ArrayList<String> values;
public MySimpleArrayAdapter(Context context, ArrayList<String> values) {
super(context, R.layout.list_class_item, values);
this.context = context;
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View vi = convertView;
ViewHolder holder;
if (convertView == null) {
vi = inflater.inflate(R.layout.list_student_item, null);
holder = new ViewHolder();
holder.fname = (TextView) vi.findViewById(R.id.tvFname);
holder.sname = (TextView) vi.findViewById(R.id.tvSname);
holder.ID = (TextView) vi.findViewById(R.id.tvStudentID);
holder.email = (TextView) vi.findViewById(R.id.tvEmail);
holder.status= (ImageView) vi.findViewById(R.id.icon);
if(checkListArr.get(position).toString().equals("Absent")) {
holder.status.setTag("unchecked");
} else if (checkListArr.get(position).toString().equals("Present")) {
holder.status.setTag("checked");
}
vi.setTag(holder);
} else {
holder = (ViewHolder) vi.getTag();
}
if(checkListArr.get(position).toString().equals("Absent")) {
holder.status.setTag("unchecked");
} else if (checkListArr.get(position).toString().equals("Present")) {
holder.status.setTag("checked");
}
holder.ID.setText(values.get(position));
holder.fname.setText(fNameArray.get(position));
holder.sname.setText(sNameArray.get(position));
holder.email.setText(emailArray.get(position));
return vi;
}
}
有人請我的代碼中指出明顯的缺陷! Thankyou閱讀!
setOnItemClickListener(new OnItemClickListener()註釋此代碼,並在自定義適配器的適配器視圖中添加vi.setOnClickListener(new OnClickListener())並將所有偵聽器移動到作爲列表項的一部分的adpater本身。 – kumar 2013-03-28 11:11:22