【问题标题】:Adapter for a List displayed inside a Scroll View, non-Scrolling List View?滚动视图中显示的列表适配器,非滚动列表视图?
【发布时间】:2011-12-08 00:32:42
【问题描述】:

在我目前正在构建的应用程序中,我一直在通过 BaseAdapter 将 ListViews 与未绑定的数据列表同步。到目前为止,这一直有效,但现在我需要在 ScrollView 中有一个数据列表。将 ListView 放在 ScrollView 中的问题在于,两个视图都滚动并且使活动难以导航。从我在网上阅读的内容来看,共识似乎是永远不应将 ListViews 放在滚动视图中,因此应该使用 LinearLayout 或 TableLayout 。

我的问题是:谁能告诉我如何摆脱 ListView 上的滚动功能或如何通过适配器将数据列表与 LinearLayout 或 TableLayout 同步?

【问题讨论】:

    标签: android list listview scrollview adapter


    【解决方案1】:

    您可以制作自己的自定义 ListView 组件,然后覆盖 dispatchTouchEvent() 方法:

    @Override
    public boolean dispatchTouchEvent(MotionEvent event)
    {
        int action = event.getAction();
        if (!scrollEnabled) {
            event.setAction(MotionEvent.ACTION_CANCEL);
            super.dispatchTouchEvent(event);
            return true; 
        }
    
        return super.dispatchTouchEvent(event);
    }
    

    不过,在这种情况下,我过去所做的就是为我的列表设置一个单独的垂直 LinearLayout,并通过代码手动将 TextViews 添加到其中,使其看起来类似于列表视图。

    【讨论】:

    • 约翰非常感谢您的回复。您的代码确实阻止了 ListView 的滚动,但是现在我遇到的问题是,当 ListView 的高度设置为包装内容时,我的父布局没有“测量”我的 ListView。我相信这是因为 ListViews 旨在包含比它们添加到的布局更长的列表。有什么解决这个问题的建议吗?
    • 您有 2 个选项:1) 手动设置 ListView 高度(设置为在代码中计算的高度或仅设置为设置值,例如 200dp)。选项 2) 根本不使用列表视图,只需在 LinearLayout 容器内添加 TextViews。因为列表视图在技术上具有无限深度,所以它永远无法使用 wrap_content。
    • @JohnLeehey 我面临同样的问题,但如果我根据列表项设置列表视图高度,则它将起作用,但在这种情况下,将无法回收视图,因为所有列表项都将是同时可见,你有什么解决办法吗?
    猜你喜欢
    • 2015-04-17
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多