2016-04-15 6 views
2

imageviewでチェックボックスを表示していますが、gridviewでクリックしていますが、1つの画像をクリックすると複数の画像ビューにアンドロイドが表示され、スクロールすると表示チェックボックスが消えます。 ここ私のアダプタですグリッドビューホルダーに複数の時間が表示されているチェックボックスパターン

 public class ImageAdapter extends BaseAdapter { 
     private LayoutInflater mInflater; 

     public ImageAdapter() { 
      mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 



     public int getCount() { 
      return arrPath.length; 
     } 

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

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

     public View getView(final int position, View convertView, ViewGroup parent) { 
      final ViewHolder holder; 
      if (convertView == null) { 
       holder = new ViewHolder(); 
       convertView = mInflater.inflate(
         R.layout.galleryitems, parent,false); 
       holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage); 
       holder.checkbox = (CheckBox) convertView.findViewById(R.id.itemCheckBox); 
       convertView.setTag(R.id.itemCheckBox, holder.checkbox); 
       convertView.setTag(R.id.thumbImage,holder.imageview); 
       convertView.setTag(holder); 




      } else { 
       holder = (ViewHolder) convertView.getTag(); 
       holder.checkbox = (CheckBox)convertView.getTag(); 
       holder.imageview = (ImageView)convertView.getTag(); 
      } 
      holder.checkbox.setId(position); 
      holder.imageview.setId(position); 
      holder.checkbox.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        CheckBox cb = (CheckBox) v; 
        int id = cb.getId(); 


        if (thumbnailsselection[id]) { 
         cb.setChecked(false); 
         thumbnailsselection[id] = false; 
        } else { 
         cb.setChecked(true); 
         thumbnailsselection[id] = true; 
        } 
       } 
      }); 
      holder.imageview.setOnClickListener(new View.OnClickListener() { 

       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        ImageView iv = (ImageView)v; 
        int id = iv.getId(); 
        if (holder.checkbox.getVisibility() == View.GONE) { 

          holder.checkbox.getTag(); 
          holder.imageview.getTag(); 
          holder.imageview.setAlpha(0.22f); 
          holder.checkbox.setVisibility(View.VISIBLE); 
          holder.checkbox.setChecked(true); 


        } else if (holder.checkbox.getVisibility() == View.VISIBLE) { 
         holder.imageview.setAlpha(0.8f); 
         holder.checkbox.setVisibility(View.GONE); 
        } 



       } 
      }); 
      holder.checkbox.setTag(position); 
      holder.imageview.setImageBitmap(thumbnails[position]); 
      holder.checkbox.setChecked(thumbnailsselection[position]); 
      holder.id = position; 
      return convertView; 
     } 
} 

    class ViewHolder { 
     ImageView imageview; 
     CheckBox checkbox; 
     int id; 
    } 
} 
+0

、それは私のために働いた、このコードを試してみてください return arrPath.length; else return 0; } @Override public int getItemViewType(int position){ // TODO自動生成メソッドスタブ return 0; } – bambi

+0

別の「ビューホルダー」パターンの問題? 99%の症例でビューホルダーのパターンは役に立たず、頭痛の原因となるのは – pskink

答えて

1

私は(arrPath!= null)の場合は上書き 公共int型getViewTypeCount(){ // TODO自動生成されたメソッドスタブ を助けていない、このコードを試してみました

public class ImageAdapter extends BaseAdapter { 
     private LayoutInflater mInflater; 
     private ArrayList<Items> list 
     public ImageAdapter(ArrayList<Items> list) { 
      this.list=list; 
      mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 



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

     public Items getItem(int position) { 
      return list.get(position); 
     } 

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

     public View getView(final int position, View convertView, ViewGroup parent) { 
      final ViewHolder holder; 
      if (convertView == null) { 
       holder = new ViewHolder(); 
       convertView = mInflater.inflate(
         R.layout.galleryitems, parent,false); 
       holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage); 
      //Take image view in your XML  
       holder.checkbox = (ImageView) convertView.findViewById(R.id.itemCheckBox); 

       convertView.setTag(holder); 




      } else { 
       holder = (ViewHolder) convertView.getTag(); 

      } 

      if(list.get(position).isImageSelected()){ 
       // set your check image 
       holder.checkbox.setImageResource(checkResId); 
      }else{ 
       // set your Uncheck image 
       holder.checkbox.setImageResource(unCheckResId); 
      } 

      holder.checkbox.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 



        if(list.get(position).isImageSelected()){ 
         // set your Uncheck image 
         holder.checkbox.setImageResource(unCheckResId); 
         list.get(position).setIsImageSelected(false); 
        } else { 
         // set your check image 
         holder.checkbox.setImageResource(checkResId); 
         list.get(position).setIsImageSelected(false); 
        } 
        notifyDataSetChanged(); 
       } 
      }); 

      return convertView; 
     } 
} 

    class ViewHolder { 
     ImageView imageview; 
     // Use ImageView for select and deselect 
     ImageView checkbox; 
     int id; 
    } 
} 

public class Items { 



    String thumbImageUrl; 
    boolean isImageSelected; 



    public String getThumbImageUrl() { 
     return thumbImageUrl; 
    } 

    public void setThumbImageUrl(String thumbImageUrl) { 
     this.thumbImageUrl = thumbImageUrl; 
    } 

    public boolean isImageSelected() { 
     return isImageSelected; 
    } 

    public void setIsImageSelected(boolean isImageSelected) { 
     this.isImageSelected = isImageSelected; 
    } 
} 
+0

@bambi welcome;)答えを受け入れてください。 –

0

これはViewHolder dudeの使い方ではありません。 ViewHolderは、タグとして設定したときにconvertViewのように再利用されます。 UIをリンクして、findViewByIdを再度呼び出す必要はありませんでした。 データを維持する責任はお客様にあります(お客様のケースで選択したImageViewの位置)

thisを参照してください。

関連する問題