【问题标题】:Android disable scroll and click for listviewAndroid禁用滚动并单击列表视图
【发布时间】:2015-06-01 05:05:14
【问题描述】:

我有一个简单的布局、一个列表视图和两个用于过滤和排序选项的图标。当我单击这两个选项中的任何一个时,我的布局位于列表视图上方,并且仅覆盖屏幕的 60%,从而使其下方的列表视图部分可见。我想要实现的是也禁用该列表视图的滚动,只要覆盖可见,列表视图项都不应是可点击的。

我尝试过使用

setEnabled(false)
setClickable(false)

在列表视图上,但它没有任何区别。还有什么其他方法可以实现这一目标。

【问题讨论】:

    标签: android listview android-listview


    【解决方案1】:

    我建议覆盖在整个屏幕上。 然后,您可以使用(垂直)线性布局和权重(以达到 60%/40% 的比例)包裹覆盖。在线性布局中,将当前叠加层放置为第一个子项,并将一个透明视图放置为第二个子项,以阻止触摸事件。这样您就无需对列表视图进行任何修改。

    【讨论】:

    • 为什么不让过滤器选项容器成为覆盖的子项(您需要使覆盖相对/框架布局)。你试过我的建议了吗?
    • 我接受了你的建议,但我的半透明覆盖蒙版对我有用,而不是使用透明的第二个孩子来阻止触摸事件。
    【解决方案2】:

    您可以使用它来禁用父滚动视图

    parentview.requestDisallowInterceptTouchEvent(true);

    如果叠加层可见。

    【讨论】:

    • 这将使它完美。谢谢
    【解决方案3】:

    要禁用滚动,您可以使用 OnTouchListener()

    listView.setOnTouchListener(new OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_MOVE) {
                return true; // Indicates that this has been handled by you and will not be forwarded further.
            }
            return false;
        }
    });
    

    listView.setScrollContainer(false);
    

    为了禁用点击,在您的自定义 ArrayAdapter 覆盖 isEnabled 方法如下

    @Override
    public boolean isEnabled(int position) {
        return false;
    }
    

    【讨论】:

    • 如果我想再次启用可点击性怎么办?
    • "返回真;"在已启用。您可以使用布尔值并根据需要返回。
    • 如果我没记错的话 isEnabled 将在我最初创建列表时起作用,即当我第一次加载列表时,我知道在这种情况下 isEnabled 将根据我应用和设置的任何条件起作用视图的可点击性,但它甚至可以在列表视图已经创建之后工作,然后在某些用户点击操作之后我希望确定可点击性?我在这方面有点困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 2013-11-11
    相关资源
    最近更新 更多