如何使用适配器处理项目中的视图的单击侦听器?

时间:2017-06-23 16:43:17

标签: android

我尝试使用Adapter进行测验活动,并在每个项目中使用多个按钮。我将onClickListener用于tstA ImageView。点击后,图像会发生变化,但其他tstA ImageViews图像也会发生变化(每4个项目中就有一个)。这样做的正确方法是什么?

Picture of Activity

这是我的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;
    }
}

1 个答案:

答案 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,查看您的更改在列表中的效果。