ฉันหวังว่าฉันจะสามารถช่วยได้ที่นี่ ฉันคิดว่าคุณมีเค้าโครงที่กำหนดเองสำหรับรายการ listView และเค้าโครงนี้ประกอบด้วยปุ่มและมุมมองอื่น ๆ เช่น TextView, ImageView หรืออะไรก็ตาม ตอนนี้คุณต้องการให้เหตุการณ์ต่างๆเริ่มขึ้นเมื่อคลิกปุ่มและเหตุการณ์ที่แตกต่างกันเกิดขึ้นกับทุกสิ่งที่คลิก
คุณสามารถทำได้โดยไม่ต้องใช้ onListItemClick () ของ ListActivity ของคุณ
นี่คือสิ่งที่คุณต้องทำ:
คุณกำลังใช้เลย์เอาต์แบบกำหนดเองดังนั้นคุณอาจกำลังลบล้างเมธอด 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 ที่แสดงด้านบนนั้นค่อนข้างน่าเกลียดโดยปกติคุณควรใช้รูปแบบ ViewHolder เพื่อหลีกเลี่ยงการเรียก findViewById .. แต่คุณอาจรู้อยู่แล้ว
ไฟล์ custom_row.xml ของฉันคือ RelativeLayout พร้อมด้วย Button of id "button", TextView ของ id "text" และ ImageView ของ id "image" - เพื่อให้ทุกอย่างชัดเจน
ความนับถือ!