2012-11-10 6 views
4

나는 사용자 정의 ArrayAdapter와 함께 사용자 지정 ListView를 설정했습니다. 한 행은 10 개의 버튼으로 구성됩니다. 단추를 클릭 한 후에 단추 캡션을 변경할 수 없습니다. getView 메소드 안에는 모든 버튼에 대한 홀더가 있습니다.) (내가 b.getText를 호출 할 때 지금안드로이드에서 ListView 내부 버튼의 텍스트를 변경

MyHolder h = (MyHolder) getListView().getAdapter().getView(position, null, null).getTag();

Button b = h.myButton;

: 크리크 리스너는 (나는 그렇게 생각), 내가 버튼의 참조를 얻을 수 있어요 올바르게 작동하고, 주요 활동입니다 , 그것은 나에게 클릭 한 버튼의 텍스트를 준다. 하지만 시도 할 때 : b.setText ("xxx"); 버튼의 텍스트가 바뀌지 않습니다.

어떤 아이디어가 있습니까?

답변

3

나는 getListView().getAdapter().getView(position, null, null) 전화를 수동으로 실제로 기존의보기를 position에 반환한다고 생각하지 않습니다. 이 경우 동일한 데이터로 보기 만 생성되므로 변경 사항이 표시되지 않고 오류가 발생하지 않습니다.

버튼의 OnClickListener에서 전달 된보기를 사용하여 자체 텍스트를 변경하기 만하면됩니다.

public void onClick(View v) { 
    Button b = (Button) v; 
    b.setText(...); 
} 
+1

감사합니다. 그러나 내 문제는 완전히 해결되지 않았습니다. 첫 번째 버튼을 누르면 내 행의 첫 번째와 두 번째 버튼의 텍스트를 변경해야합니다. 내 행의 다른 버튼에 대한 참조는 어떻게 얻을 수 있습니까? – Dusan

+1

각 버튼의'setTag()'를 사용하여 어댑터의'getView()'에 일치하는 버튼에 대한 참조를 저장할 수 있습니다. 또는'getParent()'와'getChildAt()'를 사용하여 일치하는 버튼을 찾을 수 있습니다. – Sam

관련 문제