ListView에서 ImageView와 TextView,  CheckedTextView 사용하여 한 Row에 Image와 Text, Checkbox가 표현되는 ItemDeleteList를 만들고 있습니다.

CustomAdapter를 생성하여 현재 리스트 자체는 만들었고 정상동작을 하고 있습니다.

문제는 각 Item에 Click 이벤트 시, 해당 item(row)의 checkbox를 toggle 시키고 싶은데,

구현을 해보았으나 어떤 item을 클릭하던 제일 상위의 item만 checkbox가 toggle되고 있습니다.

해당 소스의 주석 부분에서 어떤 처리가 이뤄져야 할 것 같은데 감도 안오고, 예제도 찾기 힘들고...

부디 해결방법을 아시는 분 답변 부탁드립니다.

혹은 비슷한 유형의 예제라도 제시해주시면 감사하겠습니다.

소스는 다음과 같습니다.

------------deletelistmain.xml---------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
>

 <ListView
     android:id="@+id/delete_list"    
     android:layout_width="320px"
     android:layout_height="400px"
 />
 
 <Button
  android:layout_width="320px"
  android:layout_height="40px"
  android:id="@+id/button3"
  android:text="@string/button2"
  android:layout_gravity="center_horizontal">
 </Button>
 
 <TextView
     android:id="@+id/android:empty"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:text="tets"
    />
   
</LinearLayout>

------------deletelistrow.xml---------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
>

        <ImageView
            android:id="@+id/delete_image"
            android:layout_width="60px"
            android:layout_height="60px"
            android:padding="10px"
            android:scaleType="fitCenter"
        />
       
        <LinearLayout
         android:orientation="vertical"
         android:layout_width="200px"
         android:layout_height="60px"
        >
       
         <TextView
          android:id="@+id/delete_name"
             android:layout_width="200px"
             android:layout_height="40px"
             android:gravity="center_vertical"
             android:textColor="#FFFFFFFF"
             android:paddingLeft="10px"
             android:textSize="17sp"
             android:ellipsize="marquee"
         />
        
         <LinearLayout
          android:orientation="horizontal"
          android:layout_width="200px"
          android:layout_height="20px"
         >
         
          <TextView
           android:id="@+id/delete_time"
              android:layout_width="100px"
              android:layout_height="20px"
              android:gravity="center_vertical"
              android:textColor="#FF00FFFF"
              android:paddingLeft="10px"
              android:text="Time"
              android:textSize="13sp"
              android:ellipsize="marquee"
          />
         
          <TextView
           android:id="@+id/delete_size"
              android:layout_width="100px"
              android:layout_height="20px"
              android:gravity="center_vertical"
              android:textColor="#FFFFFF00"
              android:paddingLeft="10px"
              android:text="Size"
              android:textSize="13sp"
              android:ellipsize="marquee"
          />
          
         </LinearLayout>

        </LinearLayout>
       
  <CheckedTextView
      android:id="@+id/delete_checkbox"
      android:layout_width="60px"
      android:layout_height="60px"
      android:textAppearance="?android:attr/textAppearanceLarge"
      android:gravity="center_vertical"
      android:checkMark="?android:attr/listChoiceIndicatorMultiple"
      android:padding="6dip"
  />
   
</LinearLayout>

//------------TestDeleteList.java---------------
// 480 x 320
package com.diotek.DioNote; 
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CheckedTextView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
public class TestDeleteList extends Activity{
       
        
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.deletelistmain);
        final ArrayList<ImageItem> imageList = new ArrayList<ImageItem>();
        
        String filePath = "\\data\\app-private\\Sketchpad\\";
  String jpgFormat = "bmp";
  String fileNames[] = getFileList(filePath);
  
  Log.d("Delete", "onCreate1");
  
  Arrays.sort(fileNames);
  
  Log.d("Delete", "onCreate2");
 
  for(int i = 0; i < fileNames.length; i++) {
   File fileName = new File(filePath, fileNames[i]);
   if(jpgFormat.equals(getFileExt(fileNames[i]))) {
    Bitmap cBitmap = BitmapFactory.decodeFile(filePath + fileNames[i]);
    Log.d("Delete", "onCreate3");
    ImageItem cItem = new ImageItem(fileNames[i], cBitmap, getFileModified(filePath + fileNames[i]), getFileSize(filePath + fileNames[i]));
    Log.d("Delete", "onCreate4");
    imageList.add(cItem);
    Log.d("Delete", "onCreate5");
   }
  }
  
        ImageListAdapter listAdapter = new ImageListAdapter(this, R.layout.deletelistrow, imageList);
        ListView myListView = (ListView)findViewById(R.id.delete_list);
        myListView.setAdapter(listAdapter);
        
        Log.d("Delete", "onCreate6");
        
        myListView.setOnItemClickListener(new OnItemClickListener() {
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    ImageItem checkedItem = imageList.get(position);
    Log.d("Delete", "onCreate7");
    
    // List에서 하나의 Item(Row)를 클릭했을때 처리 필요 
         }
        });
        
        Button delete = (Button)findViewById(R.id.button3);        
        delete.setOnClickListener(new Button.OnClickListener(){            
         public void onClick(View v) {               
          // TODO Auto-generated method stub              
          Intent intent = new Intent(getApplicationContext(), TestDeleteList.class); // TestImageList.this     
          startActivity(intent);      
         }
        });
    }
    
    private class ImageListAdapter extends ArrayAdapter<ImageItem> {
        private ArrayList<ImageItem> items;
        public ImageListAdapter(Context context, int textViewResourceId, ArrayList<ImageItem> items) {
                super(context, textViewResourceId, items);
                this.items = items;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
                View v = convertView;
                if (v == null) {
                 Log.d("Delete", "adapter1");
                    LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    Log.d("Delete", "adapter2");
                    v = vi.inflate(R.layout.deletelistrow, null);
                }
                ImageItem p = items.get(position);
                if (p != null) {
                        ImageView itemImage = (ImageView) v.findViewById(R.id.delete_image);
                        TextView itemName = (TextView) v.findViewById(R.id.delete_name);
                        TextView itemLastModified = (TextView) v.findViewById(R.id.delete_time);
                        TextView itemSize = (TextView) v.findViewById(R.id.delete_size);
                        Log.d("Delete", "adapter3");
                        //CheckedTextView itemCheckbox = (CheckedTextView) v.findViewById(R.id.delete_checkbox);
                        // Adapter를 통해 List의 Checkbox 컨트롤 필요
                        Log.d("Delete", "adapter4");
                        
                        if (itemImage != null){
                         itemImage.setImageBitmap(p.getBitmap());
                        }
                        if(itemName != null){
                         itemName.setText(p.getName());
                        }
                        if(itemLastModified != null){
                         itemLastModified.setText(p.getLastModified());
                        }
                        if(itemSize != null){
                         itemSize.setText(p.getSize());
                        }
                        
                        Log.d("Delete", "adapter5");
                     // Adapter를 통해 List의 Checkbox 컨트롤 필요
                }
                return v;
        }
    }
    
    class ImageItem {
        
        private String Name;
        private Bitmap Bitmap;
        private String LastModified;
        private String Size;
        //private CheckedTextView Checkbox;
        
        // ItemClass에 Checkbox Class의 Instance를 생성해야 할지 여부.
        
        public ImageItem(String _Name, Bitmap _Bitmap, String _LastModified, String _Size){
         this.Name = _Name;
         this.Bitmap = _Bitmap;
         this.LastModified = _LastModified;
         this.Size = _Size;
         Log.d("Delete", "item1");
         //this.Checkbox.setChecked(false);
         Log.d("Delete", "item2");
        }
        
        public String getName() {
            return Name;
        }
        
        public Bitmap getBitmap() {
            return Bitmap;
        }
        
        public String getLastModified() {
         return LastModified; 
        }
        
        public String getSize() {
         return Size;
        }
    }
    
    public static String[] getFileList(String filePath) {
  File fileList = new File(filePath);
  String list[] = fileList.list();
  return list;
 }
 
 public static String getFileExt(String fileName) {
  if(fileName != null) {
   int index = fileName.lastIndexOf(".");
   String ext = null;
   if(index != -1) {
    ext = fileName.substring(index + 1);
   }
   return ext;
  }
  return null;
 }
 
 public static String getFileModified(String filePath) {
  File file = new File(filePath);
  Calendar calendar = new GregorianCalendar(Locale.KOREA);
  calendar.setTime(new Date(file.lastModified()));
  
  String year = String.valueOf(calendar.get(Calendar.YEAR));
  String month = String.valueOf(calendar.get(Calendar.MONTH) + 1);
  String date = String.valueOf(calendar.get(Calendar.DATE));
  
  if(month.length() < 2) month = "0" + month;
  if(date.length() < 2) date = "0" + date;
  
  String yyyymmdd = new String(year +  "-" + month + "-" + date);
  
  return yyyymmdd;
 }
 
 public static String getFileSize(String filePath) {
  File file = new File(filePath);
  long length = file.length();
  float floatSize = (float)((float)length / 1024.0);
  
  //String fileSize = new String(floatSize + " K");
  String fileSize = String.format("%.1f K", floatSize);
 
  return fileSize;
 }
}