Adapter를 아래 처럼 바꾼다.
가장 중요한 것은 View.setFocusable(false);와
ImageButton -> ImageView, Button -> TextView라는 것이다.
버튼을 뷰로 바꿔도 클릭이 정상적으로 먹힌다.
클릭만 먹히면 되니 이런 식으로 하는 것이 좋다. // 버튼으로 할 경우 OnClickListener()이 안 먹힘.
예시 코드 :
// getView @Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) { holder = new ViewHolder(); v = mInflater.inflate(R.layout.list_contacts, null); holder.mainName = (TextView) v.findViewById(R.id.tv_main_name); holder.mainFavoritesSwitch = (ImageView) v.findViewById(R.id.iv_main_favorits_switch); holder.mainCall = (ImageView) v.findViewById(R.id.iv_main_call); holder.mainMan = (ImageView) v.findViewById(R.id.iv_main_man); holder.mainName.setFocusable(false); holder.mainFavoritesSwitch.setFocusable(false); holder.mainCall.setFocusable(false); holder.mainMan.setFocusable(false);
v.setTag(holder); } else { holder = (ViewHolder) v.getTag(); }
//InfoClass를 생성하여 각 뷰의 포지션에 맞는 데이터를 가져옴 InfoClass info = InfoArr.get(position);
//리스트뷰의 아이템에 맞는 String값을 입력 holder.mainName.setText(info.name);
return v; }
//ViewHolder private class ViewHolder { TextView mainName; ImageView mainFavoritesSwitch; ImageView mainCall; ImageView mainMan;
} |
안드로이드 자체 버그로 보인다.
다른 해결책이 있을 수도 있다.
ImageButton이든 ImageView든 클릭만 먹히면 되니 이렇게 해도 무방하다고 본다.