안드로이드 개발 질문/답변
(글 수 45,052)
List에 custom adapter를 만들어서
데이타 버튼
고등어 [버튼]
말미잘 [버튼]
이렇게까지 호출을 하였습니다.
그리고 ListView에
OnItemClickListener
에onItemClick 매소드까지 호출을 하였습니다.
private ListView.OnItemClickListener delete = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View v, int position, long id) {
});
}
버튼 이벤트를 위해
매소드안에(onItemClick매소드안에)
단순히 Button button = (Button)findViewById(R.id.button)
후 onClickListener을 호출하여 나름 이것저것 만져보았지만 안되더군요.. .ㅠㅠ
onItemClick position이 리스트의 순번이라고 들었습니다.
이것을 분명히 이용해야 할것 같기는 한데요. 도저히 감이 잡히지 않네요.
제가 묻고 싶은것에 대한 요점은 이것 입니다.
1.onItemClick에서 button을 호출하는 방법이 저것이 맞는지, 그 후 onClickListener을 호출해서 사용하는 것이 맞는지
아니라면 호출하는 방법이 따로 있는지.
2.position을 어떻게 이용해야 하는지 ㅠㅠ 이건 도저히 감이 오지 않습니다.
3.그리고 onItemClick 파라매터 값에 대한 의미들도 알고 싶네요.
너무 많은 것을 물어보는것 같은데요. 죄송합니다
그래도 나름 구굴링 정말 많이 해봣느데 ㅠ 답이 안나와서
믿을 곳은 안드로이드 펍 밖에 없어서 이렇게 질문 올립니다 ㅠ
그리고 확실하지 않아도 되니, 이렇게 저렇게 해보라는 많은 의견 바랍니다.
감사합니다.
2010.06.01 16:23:08
1. 저렇게 하면 반응 안합니다. (정확히는 List item 하고 button하고 혼동되어서 둘중하나만 동작함)
button에게만 이벤트를 먹이는 방법은 Adapter 에 getView 나 newView 혹은 bindView 에서 button 핸들을 얻어 오고 거기에 OnClickListener 을 적용시킵니다. 그리고 대체로 list에서는 button 보다는 image로 대체합니다.
이유는 button이 list item에 존재하면 list item click에 관한 이벤트를 button이 다먹어 버리므로.
xml에 button대신 image로 변환 하시고 android:clickable="true" 이 값을 추가하시면 클릭되요.
2 position은 list에서 몇 번쨰 위치한 item인지 값이 날아 옵니다.
3 List item에 대한 click 을 선언할때는 OnListItemClick 이라는 메소드가 있습니다. 찾아 보심이.
위에 적용하신 내용은 List dialog에 적용하는 방법인데 List에 적용해도 뭐 사실 문제 없습니다만,
파라메터 값은 v는 item 하나의 xml로 구성된 View 입니다. 즉 데이타 버튼 으로 이루어진 VIew 값이구요 postion은 list상의 몇번째 위치한건지 값 그리고 id 값은 실제로 부여된 id 값인데 이게 custom adapter에서 getId에 의해서 return 되는 값과 동일 합니다.
그리고 List를 작성할때는 Activity 보다는 ListActivity를 추천드립니다. List에 최적화 되어 있구요 단 점이라면
ListView Id가 android:id="@android:id/list" 이렇게 정의 되어 있어야 합니다.
2010.06.01 16:59:02
직접적으로 도움이 되는 내용은 아닙니다만...
리스트의 아이템 자체가 터치의 대상인데 그 안에 버튼을 넣는 것은 다른 워크플로우도 대체하여 피하는 것이 좋을 듯 합니다. (사용하는 입장에서 직관적이지 않고 복잡해지기 때문입니다.)
안드로이드 포함 모바일 기기의 작은 화면에는 단순한 UI와 워크플로우로 재구성 하셔야 할 듯 합니다.
안드로이드의 뷰와 위젯들도 그런 부분을 감안하여 설계된 듯 하여 이미 정의된 큰 목적(사용의 직관성)과 상충하기 때문에 생각보다 더 노력이 필요하며 무엇보다 노력의 결과가 무용지물이 될 수 있습니다. (사용이 불편하기 때문에요.)
리스트의 아이템 자체가 터치의 대상인데 그 안에 버튼을 넣는 것은 다른 워크플로우도 대체하여 피하는 것이 좋을 듯 합니다. (사용하는 입장에서 직관적이지 않고 복잡해지기 때문입니다.)
안드로이드 포함 모바일 기기의 작은 화면에는 단순한 UI와 워크플로우로 재구성 하셔야 할 듯 합니다.
안드로이드의 뷰와 위젯들도 그런 부분을 감안하여 설계된 듯 하여 이미 정의된 큰 목적(사용의 직관성)과 상충하기 때문에 생각보다 더 노력이 필요하며 무엇보다 노력의 결과가 무용지물이 될 수 있습니다. (사용이 불편하기 때문에요.)