소스코드는 아래와 같습니다.

우선 onCreate함수안에 setListAdapter(new ShopListAdapter(this, R.layout.shop_item, c, from, to)); 로 ShopListAdapter 클래스를 호출합니다.


 class ShopListAdapter extends SimpleCursorAdapter{
        private Cursor cur;
        private Activity context;
        
        public ShopListAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
            super(context, layout, c, from, to);
            // TODO Auto-generated constructor stub
            this.cur = c;
            this.context = (Activity)context;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            ViewHolder holder;
            cur.moveToPosition(position);
            
            if(convertView == null){
                LayoutInflater inflater = (context).getLayoutInflater();
                convertView = inflater.inflate(R.layout.shop_item, parent, false);
                
                holder = new ViewHolder();
                holder.txt_shopKrNm = (TextView) convertView.findViewById(R.id.txt_shopKrNm);
                
                holder.txt_shopCnNm = (TextView) convertView.findViewById(R.id.txt_shopCnNm);
                holder.txt_addr = (TextView)convertView.findViewById(R.id.txt_shopAddr);
                holder.img_shop = (ImageView)convertView.findViewById(R.id.img_shop);
                holder.btn_call = (ImageButton)convertView.findViewById(R.id.img_btnCall);
                holder.btn_call.setOnClickListener(new OnClickListener() {
                    
                    @Override
                    public void onClick(View v) {
                        String phoneNum = "";
                        if(cur.getString(5) != null){
                            phoneNum = cur.getString(5);
                        }else {
                            phoneNum = cur.getString(6);
                        }
                        Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+phoneNum));
                        startActivity(intent);
                    }
                });
                holder.btn_call.setFocusable(false);
                convertView.setTag(holder);
            }else{
                holder =  (ViewHolder) convertView.getTag();
            }
            
            holder.txt_shopKrNm.setText(cur.getString(1));
            holder.txt_shopCnNm.setText(cur.getString(2));
            holder.txt_addr.setText(cur.getString(3));
            holder.phone_num = cur.getString(5);

            if(cur.getString(4) != null){
                String imgFullPath = DBInfo.IMG_ASSET_FILE_PATH + cur.getString(4);
                Bitmap btBitmap = loadBitmap(imgFullPath);
                holder.img_shop.setVisibility(View.VISIBLE);
                holder.img_shop.setImageBitmap(btBitmap);
            }
                    
            return convertView;
        }
        
    }
    
    static class ViewHolder{
        TextView txt_shopKrNm; //한국상호명
        TextView txt_shopCnNm; //중국상호명
        TextView txt_addr; //주소
        ImageView img_shop; //대문 이미지
        ImageButton btn_call; //전화걸기 버튼
         // 전화번호는 화면에 보여지지 않는 부분이라 viewholder에 선언하지 않았습니다.
  }


위 코드로 원하는 정보는 잘 보여집니다. ( 대문이미지, 한국상호명, 중국 상호명, 주소,)


근데, 전화걸기 버튼을 누르면 엉뚱한 번호(두번째 row에 전화걸기 버튼을 눌렀는데, 다른 row에 있는 전화번호로 전화걸기 하는 등등)로 전화걸기가 됩니다.


1. getView함수에서 파라메타로 넘어오는 position 값을 찍어 보면은 0,1,2,3,4,0,1,2,3,4 이런식으로 나오는데,  cur.moveToPosition(position);  코드 상으로 viewholder 변수들이 어떻게 정상적으로 들어가 있는걸까요?


2. btn_call의 이미지 버튼 클릭시 원하는 전화번호로 걸리게 할려면 어떻게 해야 될까요?


3. 리스트 클릭 콜백 함수인 onListItemClick 에서는 상세화면으로 넘기는데 정상적인 값만 보여집니다. 그렇다면 이미지 버튼 클릭시 

onListItemClic함수가 호출 되도록 하는 방법도 있을까요?



몇일을 찾아 봤는데, 잘 몰라서 여쭤봅니다.