2015-12-07 34 views
1

我正在實施刪除與Android網格視圖中的圖像複選框。我已經完成刪除選中的圖像,但複選框顯示爲原樣。如何刪除複選框也從grid.Can有人幫我解決這個問題的複選框。
這是Adapter類我getView()methid如何從Android Gridview中刪除複選框

*

@Override 
     public View getView(final int position, View convertView, ViewGroup parent) 
     { 
      ViewHolder holder; 
      if (convertView == null) 
      { 
       holder = new ViewHolder(); 
       convertView = mInflater.inflate(R.layout.add_post_grid_item_layout, parent , false); 
       holder.image = (ImageView) convertView.findViewById(R.id.image); 
       holder.checkbox = (CheckBox) convertView.findViewById(R.id.itemCheckBox); 
       convertView.setTag(holder); 
      } 
      else 
      { 
       holder = (ViewHolder) convertView.getTag(); 
      } 
      Bitmap myBitmap = BitmapFactory.decodeFile(fileName.get(position)); 
      holder.image.setImageBitmap(myBitmap); 
      holder.checkbox.setTag(position); 
      holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
        mSparseBooleanArray.put((Integer) buttonView.getTag(), isChecked); 
        int pos = (Integer) buttonView.getTag(); 
        if (!buttonView.isChecked()) { 
         picsName.remove((String) fileName.get(pos)); 
        } else if (buttonView.isChecked()) { 
         if (!picsName.contains((String) fileName.get(pos))) { 
          picsName.add((String) fileName.get(pos)); 
         } 
        } 
        notifyDataSetChanged(); 
       } 
      }); 
      return convertView; 
     } 

在Activity類此刪除按鈕

imgDeleteImagesFromGallery.setOnClickListener(new View.OnClickListener() 
      { 
       @Override 
       public void onClick(View v) 
       { 
        int len = selectedItems.size() - 1; 
        for (int i = len; i > 1; i--) 
        { 
         fileName.remove(i); 
         fileName.remove((Integer) vh.checkbox.getTag(i)); 
         if(checks.get(i)==1){ 
          checks.remove(i); 
          i--; 
         } 
        } 
        gridAdapter.notifyDataSetChanged(); 
        gridView.clearChoices(); 
       } 
      }); 

這是行xml文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="1dp" 
    android:background="@android:color/transparent"> 

    <ImageView 
     android:id="@+id/image" 
     android:layout_width="115dp" 
     android:layout_height="110dp" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:scaleType="fitXY" /> 

    <CheckBox 
     android:id="@+id/itemCheckBox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" /> 


</RelativeLayout> 
+0

你可以上傳你的行xml嗎?還要上傳與您的問題的屏幕截圖... – user320676

+0

@ user320676:嗨,感謝您的回覆。我editrd我的帖子,並上傳與問題的截圖。 –

+0

把你的setOnCheckedChangeListener代碼放在裏面if(convertView == null){convertView.setTag(holder); }並嘗試 – user320676

回答

1

初始化selectedPic數​​組存儲sel的圖像ected適配器上

private ArrayList<Integer> selectedPic = new ArrayList<Integer>(); 

創建此方法跟蹤選中該複選框poisitions上的適配器類別

public ArrayList<Integer> getSelectedChecckedImages() { 
     return selectedPic; 
    } 

    public void clearSelectedCheckedImages() { 
     selectedPic.clear(); 
    } 

適配器類

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    layout = convertView; 
    ViewHolder holder; 
    if (convertView == null) { 
     holder = new ViewHolder(); 
     convertView = inflater.inflate(R.layout.add_post_grid_item_layout, parent, false); 
     holder.image = (ImageView) convertView.findViewById(R.id.image); 
     holder.text = (TextView) convertView.findViewById(R.id.text); 
     holder.checkbox = (CheckBox) convertView.findViewById(R.id.itemCheckBox); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    Bitmap myBitmap = BitmapFactory.decodeResource(mConext.getResources(), data.get(position)); 
    holder.image.setImageBitmap(myBitmap); 
    holder.text.setText("" + position); 
    holder.checkbox.setTag(position); 
    holder.checkbox.setChecked(selectedPic.contains(data.get(position))); 
    holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      int pos = (Integer) buttonView.getTag(); 
      if (!buttonView.isChecked()) { 
       selectedPic.remove(data.get(pos)); 
      } else if (buttonView.isChecked()) { 
       if (!selectedPic.contains(data.get(pos))) { 
        selectedPic.add(data.get(pos)); 
       } 
      } 
     } 
    }); 
    return convertView; 
} 

Delete按鈕事件的getView在您的活動

@Override 
    public void onClick(View v) { 
     for (Integer obj : adapter.getSelectedChecckedImages()) { 
      data.remove(obj); 
     } 
     adapter.clearSelectedCheckedImages(); 
     adapter.notifyDataSetChanged(); 
    } 

讓我知道如果你仍然有任何問題,我會幫助

+0

嗨,這裏有一些問題在我身邊 –

+0

ArrayList data = new ArrayList ();和private ArrayList selectedPic = new ArrayList (); selectedPic.add(數據。得到(POS));問題是ArrayList中的add(java.lang.Integer)不能應用於(java.lang.String) –

+0

我可以使用ArrayList selectedPic = new ArrayList ();而不是ArrayList selectedPic = new ArrayList (); –

相關問題