Android自定义gridview在滚动时更改选择器

时间:2014-11-20 10:55:45

标签: android gridview

您好我正在使用Android自定义网格视图。我有一个带有图像视图,文本视图的自定义网格项。当我点击图像视图时它会改变它的颜色。它工作得很好。但是我有一个问题

  1. 图像视图在网格视图滚动时更改状态
  2. 当我点击图片视图时,另一个图片视图也会改变其状态。
  3. 我使用了代码

      public class CustomGrid extends BaseAdapter{
        private Context mContext;
        private final String[] web1;
       private final int[] Imageid; 
    
        public CustomGrid(Context c,String[] web,int[] Imageid ) {
            mContext = c;
            this.Imageid = Imageid;
            this.web1 = web;
        }
    
        @Override
        public int getCount() {
    
            return web1.length;
        }
    
        @Override
        public Object getItem(int position) {
    
            return null;
        }
    
        @Override
        public long getItemId(int position) {
    
            return 0;
        }
    
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
             final ImageView button01;
            View v;
            if (convertView == null) {  // if it's not recycled, initialize some attributes
                LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(     Context.LAYOUT_INFLATER_SERVICE );
                v = inflater.inflate(R.layout.grid_single, parent, false);
    
            } else {
                v = convertView;
            }
            TextView text = (TextView)v.findViewById(R.id.grid_text);
            text.setText(web1[position]);
            ImageView image = (ImageView)v.findViewById(R.id.grid_image);
    
            image.setBackgroundResource(Imageid[position]);
             button01 = (ImageView)v.findViewById(R.id.star);
            button01.setOnClickListener(new OnClickListener() {
                int button01pos = 0;
                public void onClick(View v) {
                    if (button01pos == 0) {
                        button01.setImageResource(R.drawable.star);
                        button01pos = 1;
                    } else if (button01pos == 1) {
                        button01.setImageResource(R.drawable.startclicked);
                        button01pos = 0;
                    }
                }
            });
            return v;
        }
       }
    

1 个答案:

答案 0 :(得分:0)

以这种方式试试......

创建另一个数组来存储button01pos的值,初始值为{0,0,0,0 ...};

     public class CustomGrid extends BaseAdapter{
     private Context mContext;
     private final String[] web1;
     private final int[] Imageid; 
     private final int[] button01pos;

    public CustomGrid(Context c,String[] web,int[] Imageid, int[] button01pos ) {
        mContext = c;
        this.Imageid = Imageid;
        this.web1 = web;
        this.button01pos=button01pos;
    }

然后在getview()方法中,添加此项,

if (button01pos[position] == 0) {
                    button01.setImageResource(R.drawable.star);

                } else if (button01pos == 1) {
                    button01.setImageResource(R.drawable.startclicked);

                }

button01.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                if (button01pos[position] == 0) {
                    button01.setImageResource(R.drawable.star);
                    button01pos[position] = 1;
                } else if (button01pos[position] == 1) {
                    button01.setImageResource(R.drawable.startclicked);
                    button01pos[position] = 0;
                }
            }
        });