समान समस्या में भाग लें जहां खाली स्थान पर क्लिक होने पर मुझे विस्तृत सूची तत्वों को बंद करने की आवश्यकता थी। यहां बताया गया है कि मैंने इसे कैसे हल किया।
public class CustomListView extends ListView {
private OnNoItemClickListener mOnNoItemClickListener;
public interface OnNoItemClickListener {
void onNoItemClicked();
}
public CustomListView(Context context) {
super(context);
}
public CustomListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
//check whether the touch hit any elements INCLUDING ListView footer
if(pointToPosition((int) (ev.getX() * ev.getXPrecision()),
(int) (ev.getY() * ev.getYPrecision())) == -1 && ev.getAction() == MotionEvent.ACTION_DOWN) {
if(mOnNoItemClickListener != null) {
mOnNoItemClickListener.onNoItemClicked();
}
}
return super.dispatchTouchEvent(ev);
}
public void setOnNoItemClickListener(OnNoItemClickListener listener) {
mOnNoItemClickListener = listener;
}
}
तो नियमित ListView के बजाय अपने एक्सएमएल फ़ाइल में इस CustomListView का उपयोग करें और अपनी गतिविधि/टुकड़ा अंदर OnNoItemClickListener को लागू करने और mListView.setOnNoItemClickListener (यह) कहते हैं; ऑनऑटमक्लिड() फ़ंक्शन पर कॉलबैक सक्षम करने के लिए क्रिएट पर।
ध्यान दें कि यदि आपकी सूची दृश्य में शीर्षलेख या पाद लेख हैं तो इन्हें सूची तत्वों के रूप में माना जाता है और ऑनऑटमक्लिड() को नहीं कहा जाएगा।
स्रोत
2015-01-28 10:54:24
FWIW के लिए अच्छी तरह से काम के साथ आया था, मैं 'setOnClickListener प्राप्त करने के लिए एक मुद्दा दायर()' प्रतिबंध, उठाया के रूप में आप एक बनाने के उत्कृष्ट बिंदु: http://code.google.com/p/android/issues/detail?id=59559 – CommonsWare