如何在android的gridview中一次更改多个图像?

cbjzeqam  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(260)

我正在用java开发androidstudio。
我在gridview中有很多imageview。我正在尝试应用同时影响多个imageview的click事件
我想做的是:当一个imageview被单击时,另一个imageview没有被单击以更改其图像。
例如,在同一个gridview中有两个imageview a和b。如果单击一个imageview,则a和b imageview都将设置为不同的imagesources。
我能做的就是只更改单击的imageview。我想知道如何在gridview中访问未选中的项目。我在适配器内制作了onclick监听器。

public View getView(int position, View convertView, ViewGroup parent) {
        convertView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.ingrid,parent,false);

            ImageView blackorwhite = convertView.findViewById(R.id.blackOrWhite);

            Integer val = mData.get(position);
            blackorwhite.setImageResource(blockColor.get(val));
            blackorwhite.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    blackorwhite.setImageResource(R.color.white);
                }
            });
bejyjqdl

bejyjqdl1#

你可以做一个接口回调来知道哪个项目被点击,例如这是你的接口

interface OnClickListener {
    void onClick(int position)
}

并将此接口传递给我们的适配器,在getview方法中,每当单击视图时,都可以调用接口的onclick方法
这是示例代码

interface OnClickListener {
    void onClick(int position);
}

public class GridViewAdapter extends BaseAdapter {

    private List<String> list;
    private OnClickListener listener;

    private Context context;

    public GridViewAdapter(Context context,List<String> list,OnClickListener listener){
        this.listener = listener;
        this.context = context;
        this.list = list;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

       View  view = LayoutInflater.from(context).inflate(ur layout);

       view.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               listener.onClick(position);
           }
       });

        return view;
    }
}

要启动适配器,你可以使用这个代码,

GridViewAdapter adapter = new GridViewAdapter(context, imageList, new OnClickListener() {
            @Override
            public void onClick(int position) {
                // this method called every time an view get clicked
                // and u can change the DataSet which now is imageList
               // imageList.set(position,"something new ");
                // after the change of DataSet u should cal the notifyDataSetChanged
                adapter.notifyDataSetChanged();
            }
        });

相关问题