使用 ListAdapter 填充 ScrollView 布局内的 LinearLayout

2024-03-07

我面临一个非常常见的问题: 我布置了一个活动,现在发现它应该显示其中的一些项目ScrollView。通常的方法是使用现有的ListAdapter,将其连接到ListView and BOOM我会有我的物品清单。

BUT你不应该放置一个嵌套的ListView in a ScrollView因为它搞砸了滚动 - 甚至 Android Lint 也抱怨它。

所以这是我的问题:

我如何连接一个ListAdapter to a LinearLayout或者类似的东西?

我知道这个解决方案无法扩展到很多项目,但我的列表非常短(LinearLayout.

我想出的一种解决方案是将现有的活动布局放置在ListView。但这感觉就像滥用这种机制,所以我正在寻找一种更清洁的解决方案。

Ideas?

UPDATE:为了激发正确的方向,我添加了一个示例布局来显示我的问题:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/news_detail_layout"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:orientation="vertical"
              android:visibility="visible">


    <ScrollView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="#FFF"
            >

        <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:orientation="vertical"
                android:paddingLeft="@dimen/news_detail_layout_side_padding"
                android:paddingRight="@dimen/news_detail_layout_side_padding"
                android:paddingTop="@dimen/news_detail_layout_vertical_padding"
                android:paddingBottom="@dimen/news_detail_layout_vertical_padding"
                >

            <TextView
                    android:id="@+id/news_detail_date"
                    android:layout_height="wrap_content"
                    android:layout_width="fill_parent"
                    android:gravity="center_horizontal"
                    android:text="LALALA"
                    android:textSize="@dimen/news_detail_date_height"
                    android:textColor="@color/font_black"
                    />

            <Gallery
                    android:id="@+id/news_detail_image"
                    android:layout_height="wrap_content"
                    android:layout_width="fill_parent"
                    android:paddingTop="5dip"
                    android:paddingBottom="5dip"
                    />

            <TextView
                    android:id="@+id/news_detail_headline"
                    android:layout_height="wrap_content"
                    android:layout_width="fill_parent"
                    android:gravity="center_horizontal"
                    android:text="Some awesome headline"
                    android:textSize="@dimen/news_detail_headline_height"
                    android:textColor="@color/font_black"
                    android:paddingTop="@dimen/news_detail_headline_paddingTop"
                    android:paddingBottom="@dimen/news_detail_headline_paddingBottom"
                    />

            <TextView
                    android:id="@+id/news_detail_content"
                    android:layout_height="wrap_content"
                    android:layout_width="fill_parent"
                    android:text="Here comes a lot of text so the scrollview is really needed."
                    android:textSize="@dimen/news_detail_content_height"
                    android:textColor="@color/font_black"
                    />

            <!---
                HERE I NEED THE LIST OF ITEMS PROVIDED BY THE EXISTING ADAPTER. 
                They should be positioned at the end of the content, so making the scrollview smaller is not an option.
            ---->                        

        </LinearLayout>
    </ScrollView>
</LinearLayout>

UPDATE 2我更改了标题以使其更容易理解(得到了反对票,哦!)。


您可能应该手动将项目添加到LinearLayout:

LinearLayout layout = ... // Your linear layout.
ListAdapter adapter = ... // Your adapter.

final int adapterCount = adapter.getCount();

for (int i = 0; i < adapterCount; i++) {
  View item = adapter.getView(i, null, null);
  layout.addView(item);
}

EDIT:当我需要显示大约 200 个重要的列表项时,我拒绝了这种方法,它非常慢 - Nexus 4 需要大约 2 秒来显示我的“列表”,这是不可接受的。所以我转向弗洛的头球方法。它的工作速度要快得多,因为列表视图是在用户滚动时按需创建的,而不是在创建视图时创建的。

Resume:手动将视图添加到布局更容易编码(因此可能会减少移动部件和错误),但会遇到性能问题,因此如果您有 50 个或更多视图,我建议使用标头方法。

例子。基本上,活动(或片段)布局转换为类似这样的内容(不再需要 ScrollView):

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/my_top_layout"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"/>

Then in onCreateView()(我将使用带有片段的示例)您需要添加标头视图,然后设置适配器(我假设标头资源 ID 是header_layout):

ListView listView = (ListView) inflater.inflate(R.layout.my_top_layout, container, false);
View header = inflater.inflate(R.layout.header_layout, null);
// Initialize your header here.
listView.addHeaderView(header, null, false);

BaseAdapter adapter = // ... Initialize your adapter.
listView.setAdapter(adapter);

// Just as a bonus - if you want to do something with your list items:
view.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    // You can just use listView instead of parent casted to ListView.
    if (position >= ((ListView) parent).getHeaderViewsCount()) {
      // Note the usage of getItemAtPosition() instead of adapter's getItem() because
      // the latter does not take into account the header (which has position 0).
      Object obj = parent.getItemAtPosition(position);
      // Do something with your object.
    }
  }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ListAdapter 填充 ScrollView 布局内的 LinearLayout 的相关文章

  • 类型容器“Android 依赖项”引用不存在的库 android-support-v7-appcompat/bin/android-support-v7-appcompat.jar

    我在尝试在我的项目中使用 Action Bar Compat 支持库时遇到了某种错误 我不知道出了什么问题 因为我已按照此链接中的说明进行操作 gt http developer android com tools support libr
  • StrictMode 策略违规:我的应用程序中存在 android.os.strictmode.LeakedClosableViolation?

    Android 开发新手 第一次在我的应用程序上尝试 StrictMode 我注意到以下内容 并想知道这是否是我的应用程序或库中的问题 我不太清楚 谢谢你 D StrictMode StrictMode policy violation a
  • SearchView过滤ListView

    我已经实现了搜索视图来过滤我的列表视图项目 当我输入任何文本时 它会过滤列表 但当我退出搜索视图时 它不会返回原始列表项 public class PlacesListAdapter extends ArrayAdapter
  • 是否可以将数组或对象添加到 Android 上的 SharedPreferences

    我有一个ArrayList具有名称和图标指针的对象 我想将其保存在SharedPreferences 我能怎么做 注意 我不想使用数据库 无论 API 级别如何 请检查SharedPreferences 中的字符串数组和对象数组 http
  • 当文本输入聚焦在 React Native for Android 的底部工作表上时,视图移出屏幕

    我正在使用图书馆 https github com osdnk react native reanimated bottom sheet https github com osdnk react native reanimated bott
  • Adobe 是否为其 PDF 阅读器提供 Android SDK 或 API? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望能够在我们的应用程序内的视图中显示本地 PDF 文件 在 Android 4 03 下的平板电脑上运行 目前 我们将 Adob eR
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • Android SIP 来电使用带有广播接收器的服务

    大家好 其实我正在尝试创建一个应用程序 支持基于 SIP 通过互联网进行音频呼叫 这里使用本机 sip 我遇到了来电问题 我已经完成了服务的注册部分 但是在接听电话时我无法接听电话 请帮助我 Service file package exa
  • 带有 EditText 和 Spinner 的对话框

    我有一个按钮 单击后会弹出一个对话框 我希望对话框有一个EditText and a Spinner对话框内 我不知道如何设置它的视图 我有一个代码AlertDialog它有效 只是EditText and Spinner我需要将其放入其中
  • 无法访问 com.google.android.gms.internal.zzbfm 的 zzbfm 类文件未找到

    我正在将我的 Android 应用程序项目从GCM to FCM 为此 我使用 Android Studio 中的 Firebase 助手工具 并遵循 Google 开发人员指南中的说明 一切都很顺利 并将我的应用程序代码更改为FCM根据助
  • 是否有 ADB 命令来检查媒体是否正在播放

    我想使用 ADB 命令检查根植于终端的外部设备中是否正在播放音频 视频 我无法找到任何 ADB 命令 如果有 我尝试过 adb shell dumpsys media player 我想要一个命令来指定视频是否正在运行 您可以使用以下命令查
  • 获取当前 android.intent.category.LAUNCHER 活动的实例

    我创建了一个库项目 并在多个应用程序之间共享 我实现了一个简单的会话过期功能 该功能将在一段时间后将用户踢回到登录屏幕 登录屏幕活动是我的主要活动 因此在清单中它看起来像这样
  • 你的CPU不支持NX

    我刚刚下载了 android studio 但是我遇到了一个问题 当我运行它时 它说你的 cpu 不支持 NX 我应该怎么办 NX 或实际上是 NX 处理器位 是处理器的一项功能 有助于保护您的 PC 免受恶意软件的攻击 当此功能未启用并且
  • 在 SQLite 中搜索时排除 HTML 标签和一些 UNICODE 字符

    更新 4 我已经成功运行了firstchar例如 但现在的问题是使用regex 即使包含头文件 它也无法识别regex操作员 有什么线索可以解决这个问题吗 更新 2 我已经编译了sqlite3我的项目中的库 我现在正在寻找任何人帮助我为我的
  • Google 云端硬盘身份验证异常 - 需要许可吗? (v2)

    我一直在尝试将 Google Drive v2 添加到我的 Android 应用程序中 但无法获得授权 我收到 UserRecoverableAuthIOException 并显示消息 NeedPermission 我感觉 Google A
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • Android访问远程SQL数据库

    我可以直接从 Android 程序访问远程 SQL 数据库 在网络服务器上 吗 即简单地打开包含所有必需参数的连接 然后执行 SQL 查询 这是一个私人程序 不对公众开放 仅在指定的手机上可用 因此我不担心第三方获得数据库访问权限 如果是这
  • 如何根据 gradle 风格设置变量

    我想传递一个变量test我为每种风格设置了不同的值作为 NDK 的定义 但出于某种原因 他总是忽略了最后味道的价值 这是 build gradle apply plugin com android library def test andr
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 将两个文本视图并排放置在布局中

    我有两个文本视图 需要在布局中并排放置 并且必须遵守两条规则 Textview2 始终需要完整显示 如果布局中没有足够的空间 则必须裁剪 Textview1 例子 文本视图1 文本视图2 Teeeeeeeeeeeeeeeeeextview1

随机推荐

  • 选出五个总和为 S 的数字

    给定一个数组A of N非负数 我有兴趣找到可以选择 5 个数字 从数组中的不同位置 的方法数 使得它们的总和为S 有一个简单的解决方案O N 3 Let H be a hash table of sum position of leftm
  • 找到notepad.exe和mspaint.exe的路径

    找出可在不同版本的 Windows 上运行的 notepad exe 和 mspaint exe 所在位置的最佳方法是什么 我应该通过以下方式获取 Windows 目录吗SHGetFolderPath NULL CSIDL WINDOWS
  • Firebase 注销用户所有会话

    我在我的 iOS 应用程序中使用 Firebase 身份验证 当用户使用 Firebase 登录我的应用程序然后注销该用户的所有其他设备 会话 时 Firebase 有什么方法吗 我可以使用 Firebase 管理 SDK 来做到这一点吗
  • 如何使用 Go 不将空结构封送到 JSON 中?

    我有一个这样的结构 type Result struct Data MyStruct json data omitempty Status string json status omitempty Reason string json re
  • 谷歌分析:dataLayer.push 不起作用?

    基于此线程 使用 Google 跟踪代码管理器跟踪事件 https stackoverflow com questions 18192982 tracking events using google tag manager 18194823
  • 使用 GL_POLYGON 绘制圆的纹理映射

    我正在尝试使用将纹理映射到圆形GL POLYGON使用此代码 void drawCircleOutline Circle c int textureindex float angle radian x y values needed by
  • 如何在主窗体之前显示设置配置的窗体?

    在我的项目中我有两个表单 form1 form2 form1是配置表单 我想显示 Form1 当我们单击 Button1 时 然后显示 Form2 和释放 释放 Form1 我该怎么做 我用这个代码 但是这个项目启动然后自动退出 一位朋友说
  • 双打会遭受溢出吗?

    双精度浮点数或浮点数是否可能发生溢出 环绕 如果在 x86 或 x64 硬件上达到最大值 或最小值 会发生什么情况 在符合 IEEE 754 标准的系统上 溢出会导致特殊的 无穷大 或 负无穷大 值 超过该值 任何进一步的增量都将不起作用
  • 词汇分散图是seaborn

    我正在使用 seaborn 模块来生成类似于下面示例的图 import pandas as pd import matplotlib pyplot as plt import numpy as np import seaborn as sn
  • 如何将特定文件类型从一个文件夹复制到另一个文件夹

    如何将特定文件类型从一个文件夹复制到另一个文件夹 同时保留文件夹结构 以下批处理命令能够将特定文件类型复制到文件夹 但无法保留文件夹结构 for R c source f in cpp h do copy f x destination 我
  • 每个 Java 应用程序是否有一个 JVM?

    所有运行的 Java 应用程序都使用相同的 JVM 还是 每个 Java 应用程序一个 JVM 适用 假设应用程序是 IntelliJ IDEA 服务器和 NetBeans 此外 每个Java应用程序分配的JVM和使用的进程之间是否有任何联
  • AS3 - 缩放位图数据

    我想将 BitmapData 缩放到不同的大小 例如 200 400 600 和 800 有什么好的方法可以做到这一点 你不能直接缩放BitmapData但你可以对其进行缩放克隆 这是一个缩放的简单示例BitmapData package
  • 在 pkg-config 搜索路径中找不到 OpenCV 包

    我已经按照中的说明安装了 OpenCVhttps help ubuntu com community OpenCV https help ubuntu com community OpenCV sudo su sudo apt get in
  • 检索当前正在运行的应用程序的导航历史记录

    我想要一种方法来向用户显示他当前在应用程序中的位置 例如 如果我有activity A activity B activity C等等 如果他导航到activity E 例如 他应该能够看到他如何登陆当前屏幕的历史记录 从Home gt E
  • ASP.Net MVC 4 捆绑包

    我见过的很多代码都引用了这个 section Scripts Scripts Render bundles jqueryval 这很棒 而且它可以工作 如果包含 某些东西 我是否必须添加参考才能获取这些 使用 NuGet 复制 DLL 这是
  • C++ 全局初始化可以有多懒?

    我习惯于认为全局 静态类成员的所有初始化都发生在 main 的第一行之前 但我最近在某处读到该标准允许稍后进行初始化以 协助模块的动态加载 在动态链接时我可以看到这是真的 我不希望在 dlopen 库之前初始化库中初始化的全局变量 然而 在
  • 有没有办法在 return 语句之后做更多的工作?

    我有点好奇返回结果后是否可以在函数中做更多的工作 基本上 我正在使用金字塔框架 只是用 python 编码 创建一个网站 在处理输入后 我返回变量来渲染页面 但有时我想在渲染页面后做更多工作 例如 您访问我的网站并更新您的个人资料 您所关心
  • BigQuery 数据集通配符?

    我用过tableBigQuery 中的通配符功能 但是否可以使用通配符跨多个查询datasets在一个项目内 不 目前这是不可能的 技术原因之一是 如果表通配符跨越数据集 查找涉及的表会更加困难
  • html文本框形式不允许输入

    html 表单中是否有任何类不允许您在该文本框中输入或更改值 但你可以看到它的内容 例如下面的代码将允许你看到mysql数据库中记录的内容 但我想要的是它不被编辑 我将在下面的代码中添加什么 以便用户不会编辑其内容 tr td font s
  • 使用 ListAdapter 填充 ScrollView 布局内的 LinearLayout

    我面临一个非常常见的问题 我布置了一个活动 现在发现它应该显示其中的一些项目ScrollView 通常的方法是使用现有的ListAdapter 将其连接到ListView and BOOM我会有我的物品清单 BUT你不应该放置一个嵌套的Li