CursorAdapter如何在android上的GridView中工作

2023-12-13

我在 gridview 上使用光标适配器时遇到问题,我使用光标从媒体商店加载照片。我意识到我的 newView 和 bindView 被完全调用了。我的意思是假设我有 500 张照片, newView 也会被调用相同的次数。

我做错了什么吗?我认为只有当单元格在屏幕上可见时它才会调用。

    public int taskA = 0;

public GalleryCursorAdapter(Context context, Cursor c) {
    super(context, c);
    // TODO Auto-generated constructor stub
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    // TODO Auto-generated method stub
    int index = cursor.getColumnIndex(MediaStore.Images.Media._ID);
    long id = cursor.getLong(index);

    Bundle idBundle = new Bundle();
    idBundle.putLong("id", id);

    Message msg = new Message();
    msg.setData(idBundle);

    ImageHandler imgHandler = new ImageHandler(context, (ImageView) view);
    imgHandler.sendMessage(msg);

    view.setTag(imgHandler);
    Log.w("task s",  " count");
}

@SuppressLint({ "NewApi", "NewApi" })
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    // TODO Auto-generated method stub
    int index = cursor.getColumnIndex(MediaStore.Images.Media._ID);
    long id = cursor.getLong(index);

    ImageView iView = new ImageView(context);

    Bundle idBundle = new Bundle();
    idBundle.putLong("id", id);

    Message msg = new Message();
    msg.setData(idBundle);

    ImageHandler imgHandler = new ImageHandler(context, iView);
    imgHandler.sendMessage(msg);

    iView.setTag(imgHandler);
    taskA++;
    Log.w("task s", taskA+ " count");
    return iView;
}

static class ImageHandler extends Handler {

    private ImageView mView;
    private Context mContext;

    public ImageHandler(Context c, ImageView v) {
        mView = v;
        mContext = c;
    }

    @Override
    public void handleMessage(Message msg) {

        Bundle idBundle = msg.getData();

        Long id = idBundle.getLong("id");
        Bitmap image = MediaStore.Images.Thumbnails.getThumbnail(
                mContext.getContentResolver(), 
                id, 
                MediaStore.Images.Thumbnails.MICRO_KIND, 
                new Options());

        mView.setImageBitmap(image);
    }
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    ImageView iView = new ImageView(context);
    iView.setLayoutParams(new GridView.LayoutParams(200, 200));
    taskA++;
    Log.w("task s", taskA+ " count");
    return iView;
}

注意,我删除了所有不应该在newView中的代码(它应该在bindView中)替换new GridView.LayoutParams(200, 200)无论您需要什么高度/宽度,都不要使用换行内容,因为您的内容一开始是空的,导致 0x0 像素,因此光标中的所有 ImageView 都会立即适合 GridView (因此 newView 和 bindView 被调用每个视图)

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

CursorAdapter如何在android上的GridView中工作 的相关文章

随机推荐

  • MySQL 逻辑运算符

    鉴于查询 SELECT foo FROM bar WHERE a x AND b y OR c z 它如何解析这个查询 a x AND b y OR c z a x AND b y OR c z 这是一个简单的示例 但如果您将 AND OR
  • 求 R 中函数的最大值

    我有以下功能 设 F 是累积分布函数gamma分布与shape 1 and rate 1 分母是生存函数S X 1 F X The g x 是平均剩余寿命函数 我在r中编写了以下函数 x 5 denominator 1 pgamma x 1
  • 定义一个新变量以进行大量迭代,给我一个错误

    我有一个端点 您可以获取有关产品的信息 URL API 产品 如果我通过该端点执行 GET 方法 我将获取每个产品的信息 但我也可以指定我想了解的产品 即 URL API products 9345TERFER 最后一个代码是产品的id 称
  • 仅显示 PHP 检索到的标题的第一个单词

    所以我试图显示我的另一个网站的列表 一切正常 但只存储 标题 属性的第一个单词 我知道整个标题是从其他网站检索的 所以我如何让它存储所有内容 如果有帮助的话 这是代码
  • JavaFX ListView 中的图像

    有没有办法将图像添加到 JavaFX ListView 中 这就是我当前设置列表视图项目的方式 private ListView
  • 1/0 是合法的 Java 表达式吗?

    以下内容在我的 Eclipse 中编译良好 final int j 1 0 compiles fine throws ArithmeticException by zero at run time Java 从一开始就阻止了许多 哑代码 的
  • 在 Microsoft Visual Studio 2013 的 WinForms 中启用 Entity Framework 6 for MySql (C#)

    昨天我知道实体框架是除了使用 Dataset 或 DataReader 之外访问数据库的另一种方法 然后我尝试使实体框架 6 适用于 MVS 2013 中的 MySql 数据库服务器 我使用 Net FrameWork 4 5 1 打开 W
  • 如何使用 Beautiful Soup 提取没有属性的

    标签?

    假设一个网页包含以下内容 p style display none p
  • ASP.NET 应用程序内存使用率较高

    我们的一些 ASP Net 应用程序存在问题 我们的一些应用程序从一开始就占用大量内存作为其工作集 在我们的 2 个 webfarm 服务器 每个 4GB RAM 上运行多个应用程序 我们有一个稳定的环境 大约有 1 2GB 的可用内存 然
  • 使用 CLGeocoder 的正向地理编码示例

    除了 Apple 文档之外 还有有关工作示例的说明或有关如何使用正向地理编码的一些指南 这很通用 我无法理解 拜托 这太好了 还有人知道他们是使用 Google API 来实现相同的还是他们自己的吗 发现这个有效 但如果其他人发现它有用 我
  • 从映射缓冲区写入“O_DIRECT”输出文件

    我有一个写入视频缓冲区的设备 该缓冲区是使用 CMA 在系统内存中分配的 我想实现从该缓冲区到块设备的流式写入 我的应用程序使用 mmap 打开视频缓冲区 我想使用O DIRECT写入以避免与页面缓存相关的开销 基本上 应用程序的伪代码如下
  • 在java中使用SAX解析大型XML

    我正在尝试解析堆栈溢出数据转储 其中一个表称为 posts xml 其中包含大约 1000 万个条目 示例 XML
  • 使用多个对象作为键的哈希/关联数组

    有没有一种方法可以创建一个关联数组 其中每个键都是多个对象的哈希值 我对检查每个对象的状态不感兴趣 而是对对象的身份感兴趣 var myarray var a new A var b new B var c new C is not rig
  • 如何解决 CSS 文件中的“序言中不允许字符”错误

    我有财产声明h3 color 333 在我的 CSS 文件中 当我检查我的 CSS 文件时https validator w3 org 表明 序言中不允许出现字符 h 我的 h3 标签有什么问题 序言 是什么意思 有人可以解释一下吗 htt
  • 从 db2 导出带有列名的数据

    我想将 db2 表中的数据导出为 csv 格式 我还需要第一行应该是所有列名称 我使用以下命令几乎没有成功 EXPORT TO TEST csv OF DEL MODIFIED BY NOCHARDEL coldel SELECT col1
  • 值中带有数组的 NUnit 顺序属性

    我怎样才能通过string 数组到 ValuesAttribute I have public string Array1 new new test1 test2 Test Sequential public void SomeTest V
  • 用于 Avaya IVR 和 CTI 集成的 Java 客户端

    我正在寻求开发一个 Java 客户端 用于将 Avaya IVR 集成到 CTI 我有两个问题 IVR输出的格式是什么 如何使用JAVA读取此内容 我想开发一个java程序 它能够读取呼叫者提供给IVR的输入 并据此采取一些行动 Avaya
  • 确定 C++0x 可用性

    我试图确定编译时 C 0x 功能是否可用 有通用的预处理器宏吗 我使用的是 Visual Studio 2010 的编译器和 Intel 的编译器 宏观 cplusplus will 有一个价值比 更棒199711L 也就是说 并非所有编译
  • 赋值运算符与自定义构造函数的关系

    include
  • CursorAdapter如何在android上的GridView中工作

    我在 gridview 上使用光标适配器时遇到问题 我使用光标从媒体商店加载照片 我意识到我的 newView 和 bindView 被完全调用了 我的意思是假设我有 500 张照片 newView 也会被调用相同的次数 我做错了什么吗 我