// 아이템 체크시 현재 체크상태를 가져와서 반대로 변경(true -> false, false -> true)시키고
// 그 결과를 다시 ArrayList의 같은 위치에 담아준다
// 그리고 어댑터의 notifyDataSetChanged() 메서드를 호출하면 리스트가 현재 보이는
// 부분의 화면을 다시 그리기 시작하는데(getView 호출) 이러면서 변경된 체크상태를
// 파악하여 체크박스에 체크/언체크를 처리한다.
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3)
{
ImageAdapter adapter = (ImageAdapter) arg0.getAdapter();
ThumbImageInfo rowData = (ThumbImageInfo)adapter.getItem(position);
boolean curCheckState = rowData.getCheckedState();
rowData.setCheckedState(!curCheckState);
mThumbImageInfoList.set(position, rowData);
adapter.notifyDataSetChanged();
}
// ***************************************************************************************** //
// Image Adapter Class
// ***************************************************************************************** //
static class ImageViewHolder
{
ImageView ivImage;
CheckBox chkImage;
}
private class ImageAdapter extends BaseAdapter
{
private Context mContext;
private int mCellLayout;
private LayoutInflater mLiInflater;
private ArrayList<ThumbImageInfo> mThumbImageInfoList;
public ImageAdapter(Context c, int cellLayout, ArrayList<ThumbImageInfo> thumbImageInfoList)
{
mContext = c;
mCellLayout = cellLayout;
mThumbImageInfoList = thumbImageInfoList;
mLiInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount()
{
return mThumbImageInfoList.size();
}
public Object getItem(int position)
{
return mThumbImageInfoList.get(position);
}
public long getItemId(int position)
{
return position;
}
public View getView(int position, View convertView, ViewGroup parent)
{
if (convertView == null)
{
convertView = mLiInflater.inflate(mCellLayout, parent, false);
ImageViewHolder holder = new ImageViewHolder();
holder.ivImage = (ImageView) convertView.findViewById(R.id.ivImage);
holder.chkImage = (CheckBox) convertView.findViewById(R.id.chkImage);
convertView.setTag(holder);
}
final ImageViewHolder holder = (ImageViewHolder) convertView.getTag();
if (((ThumbImageInfo) mThumbImageInfoList.get(position)).getCheckedState())
holder.chkImage.setChecked(true);
else
holder.chkImage.setChecked(false);
if (!mBusy)
{
try
{
String path = ((ThumbImageInfo) mThumbImageInfoList.get(position)).getData();
BitmapFactory.Options option = new BitmapFactory.Options();
if (new File(path).length() > 100000)
option.inSampleSize = 10;
else
option.inSampleSize = 2;
Bitmap bmp = BitmapFactory.decodeFile(path, option);
holder.ivImage.setImageBitmap(bmp);
holder.ivImage.setVisibility(0x00000000);
setProgressBarIndeterminateVisibility(false);
}
catch (Exception e)
{
e.printStackTrace();
setProgressBarIndeterminateVisibility(false);
}
}
else
{
setProgressBarIndeterminateVisibility(true);
holder.ivImage.setVisibility(0x00000004);
}
return convertView;
}
}
******************************* ThumbImageInfo.java ********************************
public class ThumbImageInfo
{
private String id;
private String data;
private boolean checkedState;
public String getId()
{
return id;
}
public void setId(String id)
{
this.id = id;
}
public String getData()
{
return data;
}
public void setData(String data)
{
this.data = data;
}
public boolean getCheckedState()
{
return checkedState;
}
public void setCheckedState(boolean checkedState)
{
this.checkedState = checkedState;
}
}
안녕하세요.
그리드뷰에서 이미지와 체크박스를 둬서 갤러리를 구현한 후 이미지를 선택할 수 있도록 하는 예제인데요.
위 코드는 핵심코드입니다.
제가 이미지 체크 갯수에 제한을 두고 싶은데 체크박스에 체크한 갯수가 잘 불러와지지 않아 질문 올립니다.
어디 부분에서 어떻게 구현을 해야 할지 아시는분 도와주시면 감사하겟습니다~!