【问题标题】:how to handle touch events on list view when popup is being dismissed弹出窗口被解除时如何处理列表视图上的触摸事件
【发布时间】:2016-07-17 22:48:58
【问题描述】:

我有一个列表视图。每个列表项都是可点击的。每个列表项本身就是一个布局。

按下按钮时,我会在 listView 顶部显示一个 popupWindow。我已经设置了

    popupWindow.setOutsideTouchable(true);
    popupWindow.setBackgroundDrawable(new BitmapDrawable(getResources(), ""));
    PopupWindow.OnDismissListener dismissListener = new PopupWindow.OnDismissListener(){
        @Override
        public void onDismiss() {
               popWindowVisible = false;
               popwindow_dim_bg.setVisibility(View.GONE);

        }
    };
    popupWindow.setOnDismissListener(dismissListener);

现在我的问题是当我在 popupWindow 之外触摸到 listView 时,android 会执行 listView 项的点击侦听器

而我想要的行为是关闭弹出窗口(如果存在),否则让点击通过。

我在 listView 上尝试了setOnTouchListener(return true),但没有帮助。

你能帮我解决这个问题吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    据我所知,当你在对话框外点击时,如果有任何视图,它会执行视图的onclick监听器。

    为了覆盖它,请使用布尔标志

    您必须执行以下操作:

    1. boolean isDialogOpen = false;

    2. 内部按钮点击事件,设置isDialogOpen = true

    3. 在 onDismiss 内设置 isDialogOpen = false

    4. 在您的列表视图项目中单击,添加一个 if 块

      if(!isDialogOpen) {

      //你的东西在这里 ....

      }

    【讨论】:

    • 谢谢我已经这样做了。但是,这种方法存在一些问题......我会赞成但不会接受
    • so...dismisslistener 在 clicklistener 之前执行。所以当 clickListener 被执行时,布尔标志总是为假的。所以我不得不通过延迟而不是干净的解决方案来解决这个问题。
    • 我刚刚拿到了一些东西。你能试试这个,看看这是否有效dialog.setCanceledOnTouchOutside(true); dialog.setOnCancelListener( new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { } } );
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2023-03-22
    • 2016-12-26
    相关资源
    最近更新 更多