Boş alan tıklandığında genişletilmiş liste öğelerini kapatmak için gereken yere benzer bir sorunla karşılaştı. İşte bunu nasıl çözdüm.
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;
}
}
Sonra bunları normal ListView XML dosyasında bu CustomListView kullanmak ve etkinlik/parçasının içine OnNoItemClickListener uygulamak ve mListView.setOnNoItemClickListener (bu) diyoruz; onNoItemClicked() işlevinin geri çağrılmasını etkinleştirmek için onCreate uygulamasında.
ListView'nuzun üstbilgileri veya altbilgileri varsa, bunların liste öğeleri olarak kabul edildiğini ve onNoItemClicked() öğesinin çağrılmayacağını unutmayın.
FWIW için iyi çalışan bu geldi, sana bir yaptıkça kısıtlama kaldırdı ') (' setOnClickListener almak için bir sorun açtı Mükemmel nokta: http://code.google.com/p/android/issues/detail?id=59559 – CommonsWare