繁体   English   中英

禁用滚动查看ScrollView中包含的ListView

[英]Disable scrolling of a ListView contained within a ScrollView

我想为我的用户显示一个“个人资料”屏幕。

它必须具有三个视图(2个Buttons和一个ImageView )以及一个ListView才能显示该用户制作的内容。

但是,我不希望ListView滚动。 相反,我希望它尽可能大,并将所有视图放入ScrollView ,以便使用ListView滚动出前三个视图。 当然,这不能按预期工作。

我所有的三个项目都在LinearLayout 我想将它们设置为ListView的第一项,但这导致它们可以被选择为第一项,并且必须进行一些不必要的编码。

有没有一种简单的方法可以执行此操作,还是我必须坚持将Layout设置为ListView中的第一项?

我为此找到了一个非常简单的解决方案。 只需获取列表视图的适配器并在显示所有项目时计算其大小即可。 优点是此解决方案也可以在ScrollView中使用。

例:

public static void justifyListViewHeightBasedOnChildren (ListView listView) {

    ListAdapter adapter = listView.getAdapter();

    if (adapter == null) {
        return;
    }
    ViewGroup vg = listView;
    int totalHeight = 0;
    for (int i = 0; i < adapter.getCount(); i++) {
        View listItem = adapter.getView(i, null, vg);
        listItem.measure(0, 0);
        totalHeight += listItem.getMeasuredHeight();
    }

    ViewGroup.LayoutParams par = listView.getLayoutParams();
    par.height = totalHeight + (listView.getDividerHeight() * (adapter.getCount() - 1));
    listView.setLayoutParams(par);
    listView.requestLayout();
}

通过您的ListView对象调用此函数:

justifyListViewHeightBasedOnChildren(myListview);

上面显示的功能是对以下内容的修改: 禁止在列表视图中滚动

将适配器设置为列表视图后,请注意调用此功能。 如果适配器中条目的大小已更改,则还需要调用此函数。

你可以这样做

listView.setScrollContainer(false);

有关更多信息,请检查

如何获得不可滚动的ListView?

将它们作为第一项添加到ListView似乎是一个很好的解决方案。

要使View不可选择,只需获取view和.setClickable(false)

我会在ListView顶部添加一个具有不可见背景的View 设置一个View.OnTouchListener() 并通过返回消耗事件trueonTouch()的方法View.OnTouchListener()

当您希望列表再次向后滚动时,请删除透明View上设置的触摸侦听器

如果必须在列表视图中显示有限数量的项目,并且要停止滚动列表视图,则必须使listview的高度大于项目的总高度。

例如,您要显示3个项目。 (行高为30)。 那么项目的总高度将变为3 x 30dp = 90dp,

所以现在您必须将listview的高度设置为大于90。例如:100dp。 所以现在您的列表视图在任何情况下都不会滚动。

我认为最好的方法是将2个按钮和图像视图放在LinearLayout(或任何适合您的布局)中,然后使用addHeaderView方法将此布局添加为列表标题:

http://developer.android.com/reference/android/widget/ListView.html#addHeaderView(android.view.View

使用以下指令:

name_lista.getLayoutParams (). height = new_size

new_size是一个变量,您将根据列表中元素的数量进行计算,例如:

new_size = 100 * list_size;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM