android - 禁用 ScrollView 中包含的 ListView 的滚动

标签 android listview scrollview

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

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

但是,我不希望 ListView 滚动。相反,我希望它尽可能大,并将我的所有 View 放在一个 ScrollView 中,这样三个第一个 View 就会随着 ListView 滚动出来。当然,这不会按预期工作。

我所有的三个项目都在 LinearLayout 内。我曾想过让它们成为 ListView 中的第一项,但这导致它们可以作为第一项被选择,并且不得不进行一些不需要的编码。

有没有一种简单的方法可以做到这一点,还是我必须坚持让布局成为我的 ListView 中的第一项?

最佳答案

我为此找到了一个非常简单的解决方案。只需获取 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);

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

请注意在将适配器设置为 ListView 后调用此函数。如果适配器中条目的大小发生了变化,您也需要调用该函数。

关于android - 禁用 ScrollView 中包含的 ListView 的滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12212890/

相关文章:

android - 在Android中获取Scrollview中ImageView的id

java - 无法在某些设备上未调用 Looper.prepare() 的线程内创建处理程序

android - 在没有 android studio 的情况下测试 ionic 2 应用程序

android - 单击 listView 从数据库访问数据

c# - WPF:ListView 和编辑 ListViewItem

css - 应用 CSS 样式后,JavaFX ListView 多项选择不起作用

xaml - ScrollView 在 RefreshView .net Maui 中不起作用

ios - TouchableOpacity onPress在ScrollView中不起作用

Android:为什么 Handlers 发布一个可运行的?

java - 从收件箱读取短信