마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

리스트뷰 전화아이콘 클릭시 전화 걸기

0 추천

아래 getView의 코드 입니다. 

현재 사진 이름 번호 아이콘1 아이콘2  <<의 형태로 커스텀리스트뷰를 만든다음 

아이콘 1을 누르면 전화걸기 아이콘 2누르면 메일이 작성되게 하려고 하는데

현재 테스트 하기 위해 Toast로 메시지를 띄우게 만들어놓고 테스트를 하고 있습니다.

다만 아래와 같이 코드를 짜면 아이콘을 클릭해도 아이콘이 클릭 되지 않아 Toast로 작성해 놓은 몇번째 클전화 클릭이라는 메시지가 출력이 되지 않습니다... 어찌 해결을 하면 좋을까요..?

코드는 아래와 같이 작성한 상태이고 아이콘들은 ImagView로 만들었습니다.

public class MainActivity extends AppCompatActivity {

    class SingerAdapter extends BaseAdapter {
        ArrayList<SingerItem> items = new ArrayList<SingerItem>();
        private View.OnClickListener mListener;
        public SingerAdapter( View.OnClickListener listener ) {
            super();
            mListener = listener;
        }
        @Override
        public int getCount() {
            return items.size();
        }

        public void addItem(SingerItem item) {
            items.add(item);
        }

        @Override
        public Object getItem(int position) {
            return items.get(position);
        }

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

        @Override
        public View getView(final int position, View convertView, ViewGroup viewGroup) {
            final int pos = position;
            final Context context = viewGroup.getContext();

            if(convertView == null) {
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.singer_item, viewGroup, false);
            }

            SingerItemView view = new SingerItemView(getApplicationContext());
            SingerItem item = items.get(position);
            view.setName(item.getName());
            view.setMobile(item.getMobile());
            view.setImage(item.getResId());
            view.setImageCall(item.getimageCall());
            view.setImageEmail(item.getimgageMail());


            ImageView ImageCall = (ImageView) convertView.findViewById(R.id.imageCall);

            ImageCall.setOnClickListener(mListener);


            return view;
        }
    }

    EditText editText;

    ListView listView;
    SingerAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView) findViewById(R.id.listView);

        adapter = new SingerAdapter();
        adapter.addItem(new SingerItem("가", "010-1000-1000", "aaaa@aaaa.com", R.drawable.singer, R.drawable.call, R.drawable.email));
        adapter.addItem(new SingerItem("나", "010-2000-2000", "bbbb@bbbb.com", R.drawable.singer, R.drawable.call, R.drawable.email));
        adapter.addItem(new SingerItem("다", "010-3000-3000", "cccc@cccc.com", R.drawable.singer, R.drawable.call, R.drawable.email));
        adapter.addItem(new SingerItem("라", "010-4000-4000", "dddd@dddd.com", R.drawable.singer, R.drawable.call, R.drawable.email));

        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
                SingerItem item = (SingerItem) adapter.getItem(position);
                Toast.makeText(getApplicationContext(), "선택: " + item.getName(), Toast.LENGTH_SHORT).show();
            }

        });
    }
}
답답 님이 2017년 7월 5일 질문
2017년 7월 5일 수정

1개의 답변

0 추천
 
채택된 답변
익명사용자 님이 2017년 7월 5일 답변
흠.. 제가 어제부터 하루종일 해봤는데 리스너를 넘겨줘야한다는걸 잘 모르겠습니다..ㅜㅜ
알려주실 수 없을까요?
public class MainActivity extends AppCompatActivity {
 
    class SingerAdapter extends BaseAdapter {
        ArrayList<SingerItem> items = new ArrayList<SingerItem>();
        private View.OnClickListener mListener;
        public SingerAdapter( View.OnClickListener listener ) {
            super();
            mListener = listener;
        }
        @Override
        public int getCount() {
            return items.size();
        }
 
        public void addItem(SingerItem item) {
            items.add(item);
        }
 
        @Override
        public Object getItem(int position) {
            return items.get(position);
        }
 
        @Override
        public long getItemId(int position) {
            return position;
        }
 
        @Override
        public View getView(final int position, View convertView, ViewGroup viewGroup) {
            final int pos = position;
            final Context context = viewGroup.getContext();
 
            if(convertView == null) {
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.singer_item, viewGroup, false);
            }
 
            SingerItemView view = new SingerItemView(getApplicationContext());
            SingerItem item = items.get(position);
            view.setName(item.getName());
            view.setMobile(item.getMobile());
            view.setImage(item.getResId());
            view.setImageCall(item.getimageCall());
            view.setImageEmail(item.getimgageMail());
 
 
            ImageView ImageCall = (ImageView) convertView.findViewById(R.id.imageCall);
 
            ImageCall.setOnClickListener(mListener);
 
 
            return view;
        }
    }
 
    EditText editText;
 
    ListView listView;
    SingerAdapter adapter;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        listView = (ListView) findViewById(R.id.listView);
 
        adapter = new SingerAdapter(mOnClickListener); // mOnClickListener 를 생성자에 넣어주는 부분입니다.
        adapter.addItem(new SingerItem("가", "010-1000-1000", "aaaa@aaaa.com", R.drawable.singer, R.drawable.call, R.drawable.email));
        adapter.addItem(new SingerItem("나", "010-2000-2000", "bbbb@bbbb.com", R.drawable.singer, R.drawable.call, R.drawable.email));
        adapter.addItem(new SingerItem("다", "010-3000-3000", "cccc@cccc.com", R.drawable.singer, R.drawable.call, R.drawable.email));
        adapter.addItem(new SingerItem("라", "010-4000-4000", "dddd@dddd.com", R.drawable.singer, R.drawable.call, R.drawable.email));
 
        listView.setAdapter(adapter);
 
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
                SingerItem item = (SingerItem) adapter.getItem(position);
                Toast.makeText(getApplicationContext(), "선택: " + item.getName(), Toast.LENGTH_SHORT).show();
            }
 
        });
    }

   // 이벤트 리스너 입니다. 예제 코드와 동일하게 선언 했어요
   View.OnClickListener mOnClickListener = new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // 전화 거는 코드 넣어주세요.
    }
   };
}
정말 감사합니다!!
이미지뷰가 2개라서(전화아이콘,메일아이콘)
전화거는 코드 부분에 switch case 문으로 ID 받아서 사용해야 하는건가요?
ImageView ImageCall = (ImageView) convertView.findViewById(R.id.imageCall);
 ImageCall.setOnClickListener(mListener);
로 이미지 리소스에만 이벤트 리스너를 등록 했기 때문에..  메일 아이콘은 눌러도 이벤트 안들어올 겁니다.

만약, 둘다 이벤트를 받으려면 비슷한 방법으로 메일 용 이벤트 리스너를 한개 더 넣어주던지, 이벤트 리스너에서 getTag, setTag를 써서 구분 해서 사용하셔야 할 듯 합니다.
현재 전화아이콘을 눌러도 이벤트가 안받아지는건지 눌리지가 않더라구요..
전화거는 코드 넣어주세요 기입한곳에 Toast로 메시지 출력을 하게 해봤는데..

아이콘이 클릭되지 않고 리스트뷰가 클릭 되더라구요 혹시 이건 왜그런지 아시나요?

그리고 정말 많은 도움 정말정말 감사합니다..
...