Android 中使用 ArrayAdapter 和 ListView 的大型数据集

2024-02-14

出于学习目的,我想编写一个 Android 应用程序 将显示从 0 到 Integer.MAX_VALUE 的数字列表。我目前有一个 应用程序将显示从 0 到 100 的数字,这很简单,因为您只需 创建一个数字数组,然后将其传递给适配器,当前使用 阵列适配器。如果我尝试使用一个非常大的数组,程序就会崩溃 当它使用所有可用内存时。

在查看更高级的应用程序时,我注意到人们拥有大量数据集 使用数据库和 CursorAdapter。如果这是正确的做法我可以 开始阅读。我想做的事(尽管请随意告诉我 这是错误的)是用长度为 100 的数组作为我的 ArrayAdapter 的种子,或者一些 长度相对较小。从那里,当用户向上或向下滚动时,我想要 修改数组(或适配器)中的值以随着用户的增加而增加 向下滚动,删除列表中最小的项目并附加较大的项目 值到列表末尾。如果用户向上滚动,我想删除 列表末尾的项目并将新的较小值添加到开头。

正如我在这个项目中所说的那样,到目前为止我几乎没有做任何事情。

package example.VariableListView;

import java.util.ArrayList;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class variablelistview extends ListActivity {    
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

            ArrayList<Integer> intItems = new ArrayList<Integer>();
            for (int ii = 0; ii < 100; ii++) {
                    intItems.add(ii);
            }
        this.setListAdapter(new ArrayAdapter<Integer>(this,
                            android.R.layout.simple_list_item_1, intItems));
    }

}

预先感谢您的任何和所有帮助。


您使用的适配器类型应取决于您尝试呈现的数据类型。理想情况下,适配器是一个非常薄的对象,它将数据集中的项目绑定到视图。 ArrayAdapter 为小型有界数据集提供此功能,CursorAdapter 为 SQLite 查询生成的数据集提供此功能。

并非所有数据集都适合 Android 框架中提供的 Adapter 类所呈现的模型,但编写自己的数据集很容易。呈现所有正整数的列表是一个很好的例子,因为它根本不需要涉及与底层数据模型的通信。虽然维护大型数据集的滑动窗口对于某些数据来说可能是一种有用的方法,但这里不需要它。

从...开始BaseAdapter:

public class IntRangeAdapter extends BaseAdapter {
    private LayoutInflater mInflater;
    private int mItemResource;

    public IntRangeAdapter(Context context, int itemLayout) {
        // We'll use this to generate new item layouts
        mInflater = LayoutInflater.from(context);

        // This is the layout resource we'll use for each item
        mItemResource = itemLayout;
    }

    public int getCount() {
        // Since this adapter presents all positive integers,
        // we have Integer.MAX_VALUE items.
        return Integer.MAX_VALUE;
    }

    public Object getItem(int position) {
        // Each item is simply its position index.
        return position;
    }

    public long getItemId(int position) {
        // Our items won't change and we don't need stable IDs,
        // so the position of an item is also its ID.
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            // Inflate a new item layout if we weren't given an existing
            // one to reuse via the convertView parameter.
            convertView = mInflater.inflate(mItemResource, parent, false);
        }

        // Find the TextView where we will label the item.
        // (This can be optimized a bit for more complex layouts
        // but we won't bother for this example.)
        TextView tv = (TextView) convertView.findViewById(android.R.id.text1);

        // Set the item text based on its position.
        tv.setText("Item " + position);

        return convertView;
    }
}

从您发布的活动代码中使用它只需更改您的setAdapter调用并删除循环来设置数据:

this.setListAdapter(new IntRangeAdapter(this,
        android.R.layout.simple_list_item_1));

如果您想了解有关使用 ListViews 的更多信息,Google I/O 2010 的演讲给出了不错的介绍:http://www.youtube.com/watch?v=wDBM6wVEO70 http://www.youtube.com/watch?v=wDBM6wVEO70

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 中使用 ArrayAdapter 和 ListView 的大型数据集 的相关文章

随机推荐

  • heroku -- npm 安装后脚本根据环境运行 grunt 任务

    我有两个 Heroku Node js 应用程序 一个用于产品 一个用于开发 我还有一个包含开发和产品特定任务的 Gruntfile 我知道您可以设置 package json 来运行 grunt 作为 npm 的安装后挂钩 但是您可以根据
  • 通俗地描述.NET程序集循环依赖问题

    请通俗地描述一下 NET程序集编译循环依赖问题 以及其他技术是否有类似的限制 注意 我知道 这似乎是一个简单的问题 但我见过许多真实的 重要的项目 它们完全破坏了依赖关系图 与任何其他循环依赖相同 考虑三个组件 A B 和 C A 需要 B
  • 优化容量利用率的算法

    我为自己设定了一个 简单 的 C 编程挑战 以优化容量 我第一次尝试时表现不佳 如下文所述 因此我想看看是否有一个标准化算法可以做到这一点 而不使用人工智能 启发式技术 因为我根本不知道它们 我相信有一种已知的方法可以做到这一点 因为该问题
  • Rails 4 中 before_action 返回 false 有何作用?

    我正在阅读 使用Rails 4进行敏捷Web开发 第1页 338 它说 回调可以是被动的 监视控制器执行的活动 他们还可以更积极地参与请求处理 如果之前操作回调返回 false 则回调链的处理将终止 并且不会运行该操作 现在我的疑问如下 这
  • SQL Server 在一次调用中返回两次结果?

    我已将 SQL Server 数据库连接到简单的 Node js 服务器 当我运行代码时 我得到了记录集和返回给我的记录集 它们本质上都包含相同的数据 我可以使用这个 但它似乎多余 而且直接调用我需要的记录会更整洁 我希望得到一个清晰的 E
  • 初始化列表无法在 Visual Studio 2012 中使用矢量? [复制]

    这个问题在这里已经有答案了 可能的重复 Visual Studio 2012 中的 C 11 功能 https stackoverflow com questions 7421825 c11 features in visual studi
  • 如何向 bash 提示符添加图标

    我知道你可以通过编辑 bashrc 文件中的 PS1 变量来永久编辑 bash 提示符 我的如下所示 PS1 e 0 31m
  • Snakeyaml 似乎不必要地将简单值包装在列表中

    我正在尝试使用 Groovy 和 Snakeyaml 解析以下 YAML 文件 显然我已经清理了数据 但这足以证明问题 info summary Snakeyaml Issue examples 1st example name Examp
  • oracle SQL 如何从日期中删除时间

    我有一个名为StartDate包含以下格式的日期 03 03 2012 15 22 我需要的是将其转换为日期 它应该看起来像这样 DD MM YYYY 我尝试过但没有成功的是 select p1 PA VALUE as StartDate
  • 自定义流利验证器

    我对使用 fluidvalidator 非常陌生 我所知道的只是基本的rulefor 但说到习惯我就完全无能为力了 有人可以指导我吗 我需要验证可为空的布尔属性 我需要比较 5 个 bool 属性 如果至少选择了其中之一 则它应该返回 tr
  • IntelliJ 不理解 Java9-ea 上的 java 库

    我在用jdk9 ea 149并创建了一个样本javafx应用程序 IntelliJ不理解java库 它显示了所有导入语句红色他们都是变灰 即使是java util List java util ArrayList它有同样的问题 我可以在外部
  • 如何在 SwiftUI 中创建此视图?

    I am trying to create a view like this in SwiftUI sorry it s so huge 具体来说 我试图在屏幕的顶部四分之一处构建滚动的标签 条形图栏行 对我来说 它看起来像一个水平滚动的
  • Keras 中的 CNN 模型条件层

    我正在尝试建立一个conditional CNN模型 模型是 At the first stage我的模型 我将数据提供给Model 1 then based on the prediction of Model 1 我想要train th
  • 如何使用 InteractionManager.runAfterInteractions 使导航器转换更快

    由于逻辑复杂 我必须渲染很多组件this props navigator push 缓慢的导航器转换使应用程序不可用 然后我注意到here http facebook github io react native docs performa
  • 将行添加到 Word 文档中的现有表(打开 XML)

    我需要打开包含现有表 例如 3 列 的现有 Word 文档 docx 并向该表添加新行 有什么办法可以做到这一点吗 我正在使用 Open XML 我正在创建这样的表 第一次 Table tbl new Table Set the style
  • 在等待挂起操作取消时处置 SemaphoreSlim 是否安全?

    我必须使用 SemaphoreSlim 来确保对代码某些部分的单线程访问 并且希望确保我正确处理所有内容 假设我有以下课程 public class Foo private readonly CancellationTokenSource
  • 如何在多种类型上使用 GraphQL 片段

    我有一个 Gatsby 项目 它对两种不同类型的内容有非常相似的 GraphQL 查询 常规页面和 wiki 文章 按块分页 export const query graphql query slug String page content
  • 使用 fft 和 ifft 更改频率而不使用整数

    我知道我可以通过改变变量来改变整数频率shift但我怎样才能改变频率使用带小数位的数字 例如 754 或 1 2345 or 67 456 如果我改变变量 shift 到一个非整数类似的数字5 1 我收到错误下标索引必须是小于 2 31 的
  • 验证 Google 地图中的某个点是陆地还是水域

    然后谷歌地图 将水域与水域分开 嗯 不是圣经意义上的 但是 我想知道我有哪些选项来验证 Lat Lon 的点是陆地还是水域 谷歌地图显然有这些数据 水体是蓝色的 但是 API 中有什么东西我可以用它来实现吗 如果没有 他们不提供服务是因为他
  • Android 中使用 ArrayAdapter 和 ListView 的大型数据集

    出于学习目的 我想编写一个 Android 应用程序 将显示从 0 到 Integer MAX VALUE 的数字列表 我目前有一个 应用程序将显示从 0 到 100 的数字 这很简单 因为您只需 创建一个数字数组 然后将其传递给适配器 当