如何在网格视图中一次显示图像的选择

时间:2011-12-27 10:23:20

标签: android

我有一个问题,我有一个自定义网格视图,其中两个图像一个是背景图像,第二个是复选标记图像,当我点击一个网格视图项目时,复选标记显示哪个呈现图像的选择但是当我们想要选择第二项网格视图,它也会在同一图像上显示复选标记,如下图所示,但我希望一次只能选择一个图像,意味着如果选择一个图像,其他复选标记将转到被隐藏请告诉我正确的结果。

enter image description here

代码: GridAdapter:

public class GridAdapter extends BaseAdapter {


    private Activity activity;
    private LayoutInflater inflater = null;
    ArrayList<Integer> items = new ArrayList<Integer>();

    int checked=0;
    public GridAdapter(Activity a, ArrayList<Integer> items) {
        activity = a;
        this.items = items;
        inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    public int getCount() {
        return items.size();
    }

    public Object getItem(int position) {
        return position;
    }

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

    public View getView(final int position, View convertView, ViewGroup parent) {
      //  View v = convertView;
          ImageView img;
        final ImageView img_select;

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.grid_items, null);
            img_select = (ImageView)convertView.findViewById(R.id.check_image);
            img_select.setTag(position);
            img = (ImageView)convertView.findViewById(R.id.img_GridItem);
            img.setTag(position);
            //img_select = (ImageView)v.findViewById(R.id.itemCheckBox);

            img.setBackgroundResource(items.get(position));


            img.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                Log.i("Clicked", "Tag###########");
                //img_select.setVisibility(View.INVISIBLE);
                img_select.setFocusable(true);
                img_select.setEnabled(true);
                if(checked==0)
                {

                img_select.setBackgroundResource(R.drawable.selectimage);
                GreetingTextContainer greet = GreetingTextContainer.getSingletonObject();
                greet.setPosition(position);
                checked =1;
                }
                else
                {
                    img_select.setBackgroundResource(0);
                    checked=0;
                }
            }
        });
        }



        return convertView;
    }
}

3 个答案:

答案 0 :(得分:1)

嗯,有一种简单的方法可以做到这一点。您可以保留以前所选项目的参考。例如你在类级别创建一个变量,在那里使用适配器。然后在onClick侦听器中,取消选择该图像并使用当前视图(当前图像)设置该变量。 e.g。

ImageView iv_selected = null;

// ..........

@Override
public void onClick(View view) 
{
     Log.i("Clicked", "Tag###########");
     if(iv_selected != null)
     {
          // unselect the image here
     }
     // set this variable again e.g.
     iv_selected = (ImageView)view;


     //img_select.setVisibility(View.INVISIBLE);
     img_select.setFocusable(true);
     img_select.setEnabled(true);
     if(checked==0)
     {

          img_select.setBackgroundResource(R.drawable.selectimage);
          GreetingTextContainer greet = GreetingTextContainer.getSingletonObject();
          greet.setPosition(position);
          checked =1;
     }
     else
     {
          img_select.setBackgroundResource(0);
          checked=0;
     }
}

在此您将始终参考单个选定的ImageView。因此,您可以在选择其他内容时取消选中它。我希望你有这个想法。

答案 1 :(得分:1)

在您的代码中,您忘记取消选择除当前所选图像之外的所有图像。只有你做的是为所选图像设置背景。你需要为其他人设置不受欢迎的图像

* Step-1 *在GridAdapter类中将所选位置初始化为-1

int checked=0;
int selectedPosition = -1; 

* Step-2 *重写你的onclick方法,如下所示

@Override
    public void onClick(View v) {
         Log.i("Clicked", "Tag###########");
         //img_select.setVisibility(View.INVISIBLE);
         img_select.setFocusable(true);
         img_select.setEnabled(true);


        if(checked==0)
        {
            selectedPosition = position;

        }
        for(int i = 0; i<items.size(); i++){
            if(i == selectedPosition){
                img_select.setBackgroundResource(R.drawable.selectimage);
                GreetingTextContainer greet = GreetingTextContainer.getSingletonObject();
                greet.setPosition(position);
                checked =1;
            }else{
                 img_select.setBackgroundResource(0);
                 checked=0;

            }
        }
    }

答案 2 :(得分:0)

在重写方法onItemClick

中执行以下操作
gridView.setOnItemClickListener(new OnItemClickListener() {
 public void onItemClick(AdapterView<?> p, View view, int position,
                        long id) {
                    pos=position;
                    for(int i=0;i<ur_imageList.size();i++){
                        if(i==position){
                            //do nothing
                        }
                        else{
                            ur_imageList.get(i).isSelected=false;
                        }
                    }
                    if(ur_imageList.get(position).isSelected){//To deselect If selected
                        ur_imageList.get(position).isSelected=false;
                    }
                    else{   
                        ur_imageList.get(position).isSelected=true;
                    }
                    gridview.invalidateViews();
                }
            });