各行の左側に 2 つの矢印 (投票用の上/下) があるカスタム リスト ビューを作成しました。セレクターを使用して、矢印のイメージ (色) を変更し、それに応じて投票を更新することができました。私の問題は、たとえば上に投票をクリックすると、下にスクロールして投票したリスト項目が画面から消えるとすぐに、元のチェックされていない状態/画像にリセットされることです。
これが私のget viewメソッドです
public View getView(final int position, View convertView, ViewGroup parent)
{
//creating the ViewHolder we defined earlier.
final ViewHolder holder = new ViewHolder();
//creating LayoutInflator for inflating the row layout.
LayoutInflater inflator = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//inflating the row layout we defined earlier.
convertView = inflator.inflate(R.layout.partylist, null);
//setting the views into the ViewHolder.
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.voteUp = (ImageView) convertView.findViewById(R.id.vote_up_image);
holder.voteUp.setTag(position);
holder.voteDown = (ImageView) convertView.findViewById(R.id.vote_down_image);
holder.voteDown.setTag(position);
holder.votes = (TextView) convertView.findViewById(R.id.votes);
//define an onClickListener for the ImageView.
holder.voteUp.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if (v.isSelected()){
v.setSelected(false);
holder.votes.setText(String.valueOf((list.get(position).votes)));
} else {
if (holder.voteDown.isSelected()){
v.setSelected(true);
holder.voteDown.setSelected(false);
holder.votes.setText(String.valueOf((list.get(position).votes+1)));
}else{
v.setSelected(true);
}
}
//Toast.makeText(PartyActivity.this, "Image from row " + position + " was pressed " + list.get(position).title, Toast.LENGTH_LONG).show();
}
});
holder.voteDown.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View w)
{
if (w.isSelected()){
w.setSelected(false);
holder.votes.setText(String.valueOf((list.get(position).votes)));
} else {
if (holder.voteUp.isSelected()){
w.setSelected(true);
holder.voteUp.setSelected(false);
holder.votes.setText(String.valueOf((list.get(position).votes-1)));
}else{
w.setSelected(true);
}
}
//Toast.makeText(PartyActivity.this, "Image from row " + position + " was pressed " + list.get(position).title, Toast.LENGTH_LONG).show();
}
});
//setting data into the the ViewHolder.
holder.title.setText(list.get(position).title);
holder.votes.setText(String.valueOf(list.get(position).votes));
//return the row view.
return convertView;
}
}