禁用滚动ScrollView中包含的ListView

时间:2012-08-31 09:48:59

标签: android listview scrollview

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

必须有三个观看次数(2 ButtonsImageView)和ListView才能显示该用户制作的内容。

但是,我不希望ListView滚动。相反,我希望它与所需的一样大,并将我的所有视图放在ScrollView中,这样三个第一个视图就会用ListView向外滚动。当然,这不符合预期。

我的所有三件物品都在LinearLayout内。我想把它们作为ListView中的第一项,但这导致它们可以作为第一项选择,并且不得不做一些不需要的编码。

有没有办法以简单的方式做到这一点,还是我必须坚持将布局作为ListView中的第一项?

7 个答案:

答案 0 :(得分:46)

我找到了一个非常简单的解决方案。只需获取列表视图的适配器并在显示所有项目时计算其大小。 优点是此解决方案也适用于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);

上面显示的功能是对帖子的修改: Disable scrolling in listview

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

答案 1 :(得分:11)

您可以通过

执行此操作
listView.setScrollContainer(false);

了解更多请检查

How to get a non scrollable ListView?

答案 2 :(得分:7)

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

要使视图无法选择,只需获取视图和.setClickable(false)

答案 3 :(得分:5)

我会在View之上添加一个隐身背景的ListView。为其设置View.OnTouchListener()。并使用true onTouch()方法返回View.OnTouchListener()来使用该事件。

如果希望列表再次向后滚动,请移除透明View

上的触控侦听器集

答案 4 :(得分:4)

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

例如,您想要显示3个项目。 (行的高度是30)。然后项目总高度变为 3 x 30dp = 90dp,

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

答案 5 :(得分:2)

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

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

答案 6 :(得分:0)

按照以下说明操作:

name_lista.getLayoutParams (). height = new_size

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

new_size = 100 * list_size;