여기서 도와 드릴 수 있기를 바랍니다. 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);
}
Button btn = (Button) convertView.findViewById(R.id.button);
btn.setOnClickListener(this);
TextView tv = (TextView) convertView.findViewById(R.id.text);
tv.setText(text);
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의 구현이 매우 추악합니다. 일반적으로 findViewById 호출을 피하기 위해 ViewHolder 패턴을 사용해야하지만 이미 알고있을 것입니다.
내 custom_row.xml 파일은 ID "button"의 Button, ID "text"의 TextView 및 ID "image"의 ImageView가있는 RelativeLayout입니다.
문안 인사!