मुझे उम्मीद है कि मैं यहां मदद कर सकता हूं। मैं मानता हूं कि आपके पास 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 का कार्यान्वयन बहुत बदसूरत है, सामान्य रूप से आपको ViewViewById कॉल से बचने के लिए ViewHolder पैटर्न का उपयोग करना चाहिए .. लेकिन आप शायद पहले से ही जानते हैं।
मेरा custom_row.xml फ़ाइल RelativeLayout बटन के साथ "बटन", आईडी का TextView "पाठ" और आईडी का ImageView "छवि" है - बस चीजों को स्पष्ट करने के लिए।
सादर!