android - 如何监听 ListView 上发生在列表项之外的点击事件?

标签 android listview android-listview

我有一个 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/

相关文章:

android - 与 getListAdapter Android 有并发症?

java - 如何在特定区域覆盖列表项文本颜色?

android - 将 Adapter 设置为 linearLayout 而不是 listView

java - 如何为 BaseAdapter 中的不同项目制作进度条功能

android - 如何在我的 Android 应用程序中集成 google+ 登录?

Android Compose 无法在 android studio 中预览可组合功能 "Rendering problem "

java - 如何使用ORDER BY按多个排序条件排序

python - ListView 缺少 QuerySet。定义 ListView.model、ListView.queryset 或覆盖 ListView.get_queryset()

android - ListFragment 的 FragmentPagerAdapter getItem 错误

android - 删除/system/xbin/su 会阻止 root 访问吗?