我有一个 ListView
占据了整个屏幕,但有时它没有足够的项目来完全覆盖 ListView
小部件。我希望能够响应点击最后一项实际上不包含某项的空白区域(这意味着 setOnItemClickListener
不合适)。
我已经在父 View 上尝试了 setOnClickListener
(他们为 ListView
本身禁用了),但点击似乎没有到达它。我还在 ListView
上尝试了 setOnTouchListener
,但这导致一些项目点击由于某种原因没有注册。关于如何实现这一目标的任何想法?
最佳答案
遇到类似的问题,我需要在单击空白区域时关闭展开的列表元素。这是我解决它的方法。
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;
}
}
然后在您的 XML 文件中使用此 CustomListView 而不是常规 ListView 并在您的 Activity/fragment 中实现 OnNoItemClickListener 并调用 mListView.setOnNoItemClickListener(this);在 onCreate 中启用对 onNoItemClicked() 函数的回调。
请注意,如果您的 ListView 有页眉或页脚,那么它们将被视为列表元素,并且不会调用 onNoItemClicked()。
关于android - 如何监听 ListView 上发生在列表项之外的点击事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18523241/