我尝试使用Adapter
进行测验活动,并在每个项目中使用多个按钮。我将onClickListener
用于tstA ImageView
。点击后,图像会发生变化,但其他tstA ImageViews
图像也会发生变化(每4个项目中就有一个)。这样做的正确方法是什么?
这是我的TestAdapter
代码:
public class TestsAdapter extends ArrayAdapter<TestsItem>{
Activity holder;
int layoutResourceId;
TestsItem item[];
public TestsAdapter(Context ctx, int resource, TestsItem[] testItem){
super (ctx,resource,testItem);
holder = (Activity)ctx;
layoutResourceId = resource;
item = testItem;
}
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
if (convertView==null){
LayoutInflater inflate = holder.getLayoutInflater();
convertView = inflate.inflate(layoutResourceId,parent,false);
}
final ImageView tstA = (ImageView) convertView.findViewById(R.id.tstA);
final ImageView tstB = (ImageView) convertView.findViewById(R.id.tstB);
final ImageView tstC = (ImageView) convertView.findViewById(R.id.tstC);
final ImageView tstD = (ImageView) convertView.findViewById(R.id.tstD);
tstA.setBackgroundResource(item[position].Test1);
tstB.setBackgroundResource(item[position].Test2);
tstC.setBackgroundResource(item[position].Test3);
tstD.setBackgroundResource(item[position].Test4);
tstA.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tstA.setImageResource(R.drawable.test_item_blue);
tstB.setImageResource(R.drawable.test_item_empty);
tstC.setImageResource(R.drawable.test_item_empty);
tstD.setImageResource(R.drawable.test_item_empty);
}
});
return convertView;
}
}
答案 0 :(得分:0)
假设您的item[position].Test1
item[position].Test2
是您已设置为背景的可绘制资源。
所以你需要像这样修改onClickListener
。
tstA.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
item[position].Test1 = R.drawable.test_item_blue;
item[position].Test2 = R.drawable.test_item_empty;
item[position].Test3 = R.drawable.test_item_empty;
item[position].Test4 = R.drawable.test_item_empty;
notifyDataSetChanged();
}
});
您需要更改您在适配器中传递的数组项,以便正确跟踪列表项图像。致电notifyDataSetChanged
,查看您的更改在列表中的效果。