여기에서 도와 드리겠습니다. 나는 당신이 listView 아이템을위한 커스텀 레이아웃을 가지고 있다고 가정하고,이 레이아웃은 버튼과 TextView, ImageView 등과 같은 다른 뷰로 구성되어있다. 이제 다른 버튼을 클릭하면 다른 이벤트가 발생하고 클릭 한 모든 이벤트는 다른 이벤트가 발생합니다.
ListActivity의 onListItemClick()을 사용하지 않고도이 작업을 수행 할 수 있습니다.
다음은 사용자가 수행해야하는 작업입니다.
사용자 정의 레이아웃을 사용하고 있으므로 사용자 정의 어댑터에서 getView() 메소드를 대체하려고합니다. 트릭은 버튼에 대한 다른 리스너를 설정하고 전체보기 (행)에 대해 다른 것입니다. 이 예에서 살펴 보자 :
private class MyAdapter extends ArrayAdapter<String> implements OnClickListener {
public MyAdapter(Context context, int resource, int textViewResourceId,
List<String> objects) {
super(context, resource, textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
String text = getItem(position);
if (null == convertView) {
convertView = mInflater.inflate(R.layout.custom_row, null);
}
//take the Button and set listener. It will be invoked when you click the button.
Button btn = (Button) convertView.findViewById(R.id.button);
btn.setOnClickListener(this);
//set the text... not important
TextView tv = (TextView) convertView.findViewById(R.id.text);
tv.setText(text);
//!!! and this is the most important part: you are settin listener for the whole row
convertView.setOnClickListener(new OnItemClickListener(position));
return convertView;
}
@Override
public void onClick(View v) {
Log.v(TAG, "Row button clicked");
}
}
귀하의 OnItemClickListener 클래스가 여기에 같이 선언 될 수있다 : 물론
private class OnItemClickListener implements OnClickListener{
private int mPosition;
OnItemClickListener(int position){
mPosition = position;
}
@Override
public void onClick(View arg0) {
Log.v(TAG, "onItemClick at position" + mPosition);
}
}
당신은 아마 OnItemClickListener 생성자에 좀 더 많은 매개 변수를 추가합니다.
그리고 중요한 점은 위의 getView 구현은 꽤 못 생기고, 일반적으로 findHandler 패턴을 사용하여 findViewById 호출을 피해야한다는 것입니다.하지만 이미 알고있을 것입니다.
내 custom_row.xml 파일은 버튼 "id"의 TextView, 텍스트 "id"의 ImageView 및 이미지 "id"의 ImageView를 가진 RelativeLayout입니다.
감사합니다!
솔루션과의 속성 중 하나
android:focusable="false"
추가)건배,
는 희망이 도움이 그 클릭 수 onListItem 할 것이다 별도로 u는 버튼 처리 할 수 있습니다 또는하여 ImageButton을 클릭 후손 초점 성은 정말로 도움이된다. 대답으로 추가하고 받아 들여야한다! –@Max 나는 그것이 정말로 나쁜 습관, 해결 방법이기 때문에 나는 그렇지 않다. 내가 영구적 인 건강한 해결책을 발견했다면 나는 대답을 할 것이다. (만약 내가 1 년 전에이 질문을 썼다는 것을 기억한다면 :) – CodeFusionMobile
나는 당신이 가지고있는 대안을보고 싶다. 나는 자손의 포커스를 설정하려고 시도 했었고 버튼으로 작동하지도 못했습니다. 또한 목록 행에 ImageViews가있는 GridView를 넣으려고했는데 비슷한 문제가 있습니다. – MrPurpleStreak