网格/列表视图的概念如何将图像发送到 imageitem 类

2024-03-11

在我的项目中,我想加载 url 图像并在 gridview 活动中显示它们。但如何将这些图像加载到 gridview 适配器呢?

所以我试图理解这个概念grid/list view适配器,据我了解。在一个基本示例中,它包含 3 个活动:

1-主要活动

通常它包含以下定义gridview布局,方法的定义GridViewAdapter(第三个活动),在网格视图中设置适配器。以及要在中发送的数据或数组图像(第二个活动)GridViewAdapter method.

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        gridView = (GridView) findViewById(R.id.gridView);
        gridAdapter = new GridViewAdapter(this, R.layout.grid_item_layout, getData());
        gridView.setAdapter(gridAdapter);
    }

好的,我的问题是在 gridview 适配器中发送图像的方法是什么?

in this example http://javatechig.com/android/android-gridview-example-building-image-gallery-in-android他们使用这种方式,但我的项目不需要 TypedArray,实际上我什么时候需要使用它?

  private ArrayList<ImageItem> getData() {
        final ArrayList<ImageItem> imageItems = new ArrayList<>();
        TypedArray imgs = getResources().obtainTypedArray(R.array.image_ids);
        for (int i = 0; i < imgs.length(); i++) {
            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), imgs.getResourceId(i, -1));
            imageItems.add(new ImageItem(bitmap, "Image#" + i));
        }
        return imageItems;
    }

在另一个example http://www.perfectapk.com/android-gridview-viewholder.html他们使用了资源

mItems = new ArrayList<GridViewItem>();
Resources resources = getResources();

mItems.add(new GridViewItem(resources.getDrawable(R.drawable.aim), getString(R.string.aim)));
:
mItems.add(new GridViewItem(resources.getDrawable(R.drawable.youtube), getString(R.string.youtube)));

在另一个example https://www.caveofprogramming.com/guest-posts/custom-gridview-with-imageview-and-textview-in-android.html他们使用静态图像

好的,我确实知道他们正在从可绘制的图像中获取图像,但是我应该怎么做才能在我的活动中显示它们

-- 如果我做错了什么,我会继续解释

2-图像项目它是存储图像的另一个活动,无需进入其中。

3-GridViewAdapter

好的,我们在这里创建类的构造函数,并创建 getview 方法,在进入它之前,我应该添加getcount()方法或getitem()我猜,convertview 用于获取旧视图,支架用于保存图像。 当然现在ImageItem是空的,因为我没有在主要活动中定义它。那么该怎么做呢?

public class GridViewAdapter extends ArrayAdapter {
    private Context context;
    private int layoutResourceId;
    private ArrayList data = new ArrayList();

    public GridViewAdapter(Context context, int layoutResourceId, ArrayList data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ViewHolder holder = null;

        if (row == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);
            holder = new ViewHolder();
            holder.imageTitle = (TextView) row.findViewById(R.id.text);
            holder.image = (ImageView) row.findViewById(R.id.image);
            row.setTag(holder);
        } else {
            holder = (ViewHolder) row.getTag();
        }

        ImageItem item = data.get(position);
        holder.imageTitle.setText(item.getTitle());
        holder.image.setImageBitmap(item.getImage());


    Picasso.
    with(mContext).
    load(ImageItem .Getimage())
    .placeholder(R.drawable.ic_launcher) 
     .fit() 
    .into(holder.imageView);

        return row;
    }

    static class ViewHolder {
        TextView imageTitle;
        ImageView image;
    }
}

edt

//Downloading data asynchronously
public class AsyncHttpTask extends AsyncTask<String, Void, Integer> {

    @Override
    protected Integer doInBackground(String... params) {
        Integer result = 0;
        try {
            // Create Apache HttpClient
            HttpClient httpclient = new DefaultHttpClient();
            HttpResponse httpResponse = httpclient.execute(new HttpGet(params[0]));
            int statusCode = httpResponse.getStatusLine().getStatusCode();

            // 200 represents HTTP OK
            if (statusCode == 200) {
                String response = streamToString(httpResponse.getEntity().getContent());
                parseResult(response);
                result = 1; // Successful
            } else {
                result = 0; //"Failed
            }
        } catch (Exception e) {
            Log.d(TAG, e.getLocalizedMessage());
        }
        return result;
    }

    @Override
    protected void onPostExecute(Integer result) {
        // Download complete. Let us update UI
        if (result == 1) {
            mGridAdapter.setGridData(mGridImages);
            mGridAdapter.notifyDataSetChanged();
        } else {
            Toast.makeText(MainActivity.this, "No Connection found,Check your Connection!", Toast.LENGTH_SHORT).show();
        }
        mProgressBar.setVisibility(View.GONE);
    }
}

String streamToString(InputStream stream) throws IOException {
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream));
    String line;
    String result = "";
    while ((line = bufferedReader.readLine()) != null) {
        result += line;
    }

    // Close stream
    if (null != stream) {
        stream.close();
    }
    return result;
}

/**
 * Parsing the feed results and get the list
 * @param result
 */
private void parseResult(String result) {
    try {

        JSONObject response = new JSONObject(result);
        JSONArray posts = response.optJSONArray("result");
        GridImages item;
        for (int i = 0; i < posts.length(); i++) {
            JSONObject post = posts.optJSONObject(i);
            String title = post.optString("name");
            String image=post.optString("path");
            item = new GridImages();
            item.Settitle(title);
            item.Setimage(image);
         //   JSONArray attachments = post.getJSONArray("attachments");
           // if (null != attachments && attachments.length() > 0) {
             //   JSONObject attachment = attachments.getJSONObject(0);
               // if (attachment != null)
                 //   item.Setimage(attachment.getString("url"));
            //}
            mGridImages.add(item);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

您不应该在适配器内使用位图,因为当它在列表视图或网格视图中时,它将消耗大量内存,而列表视图无法立即回收。因此,尝试使用 picasso 从 url 加载位图或图像。

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

网格/列表视图的概念如何将图像发送到 imageitem 类 的相关文章

  • 使用workmanager时Firestore脱机持久性错误

    我正在使用一个WorkManger定期从我的中检索信息Firestore当应用程序处于后台和前台时的数据库 此信息用于根据状态更新 UI 因此不同的状态会添加或删除 UI 的不同部分 第一次运行时效果很好 但是 一旦应用程序处于后台并且Wo
  • 在 Android Studio 中,为什么我必须在模拟器中单击“运行应用程序”两次才能启动应用程序?

    在 Android Studio 中 当我按播放按钮在 Android 模拟器上安装并运行应用程序时 大约 5 10 秒后 我在屏幕底部收到一条消息 显示 安装成功 但应用程序实际上并未运行在模拟器上 我必须再次按下播放按钮 这是非常令人沮
  • 卸载后 Web 应用程序不显示“添加到主屏幕”

    这是我第一次创建网络应用程序 我设法解决了这个问题 所以我得到了实际的 chrome 提示 将其添加到主屏幕 然后我从手机上卸载了该网络应用程序 因为我想将其展示给我的同事 但是 屏幕上不再出现提示 问题 这是有意为之的行为还是我的应用程序
  • 谷歌坐标认证

    当我尝试连接到 Google 坐标时 总是出现异常GoogleAuthException 我拥有 Google 地图协调中心许可证 我确实使用我的包应用程序名称和 SHA1 在 google 控制台中创建了我的客户端 ID 我将权限添加到清
  • android xamarin 中的 reCaptcha

    我想在 Xamarin android 应用程序中实现验证码 我抓住了这个在 Android 中集成 googles reCaptcha 验证 https www c sharpcorner com article how to integ
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Android 模拟器插件无法初始化后端 EGL 显示

    我在 Cloudbees 上设置了 Jenkins 作业 并且可以在那里成功签出并编译我的 Android 项目 现在我想在 android 模拟器中运行一些 JUnit 测试并添加 Android 模拟器插件 我将 显示模拟器窗口 选项设
  • Android 中 Kotlin 协程的正确使用方式

    我正在尝试使用异步更新适配器内的列表 我可以看到有太多的样板 这是使用 Kotlin 协程的正确方法吗 这个可以进一步优化吗 fun loadListOfMediaInAsync async CommonPool try Long runn
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 在gradle插件中获取应用程序变体的包名称

    我正在构建一个 gradle 插件 为每个应用程序变体添加一个新任务 此新任务需要应用程序变体的包名称 这是我当前的代码 它停止使用最新版本的 android gradle 插件 private String getPackageName
  • 你的CPU不支持NX

    我刚刚下载了 android studio 但是我遇到了一个问题 当我运行它时 它说你的 cpu 不支持 NX 我应该怎么办 NX 或实际上是 NX 处理器位 是处理器的一项功能 有助于保护您的 PC 免受恶意软件的攻击 当此功能未启用并且
  • Ubuntu 16.04 - Genymotion:找不到 /dev/hw_random

    I install Genymotion on the Ubuntu 16 04 64Bit I created a virtual emulator for Android 6 0 then I run this emulator but
  • 如何发布Android .aar源以使Android Studio自动找到它们?

    我正在将库发布到内部 Sonatype Nexus 存储库 Android Studio 有一个功能 可以自动查找通过 gradle 引用的库的正确源 我将 aar 的源代码作为单独的 jar 发布到 Nexus 但 Android Stu
  • 在 android DatePickerDialog 中将语言设置为法语

    有什么办法可以让日期显示在DatePickerDialog用法语 我已经搜索过这个但没有找到结果 这是我的代码 Calendar c Calendar getInstance picker new DatePickerDialog Paym
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • 我的设备突然没有显示在“Android 设备选择器”中

    我正在使用我的三星 Galaxy3 设备来测试过去两个月的应用程序 它运行良好 但从今天早上开始 当我将设备连接到系统时 它突然没有显示在 Android 设备选择器 窗口中 我检查过 USB 调试模式仅在我的设备中处于选中状态 谁能猜出问
  • 在activity_main.xml中注释

    我是安卓新手 据我所知 XML 中的注释与 HTML 中的注释相同 使用 形式 我想在 Android 项目的 Activity main xml 配置文件中写一些注释 但它给了我错误 值得注意的是 我使用的是 Eclipse 但目前 我直
  • 实现滚动选择 ListView 中的项目

    我想使用 ListView 您可以在其中滚动列表来选择一个项目 它应该像一个 Seekbar 但拇指应该是固定的 并且您必须使用该栏来调整它 我面临的一个问题是 我不知道这种小部件是如何调用的 这使得我很难搜索 所以我制作了下面这张图片 以
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 如何将 google+ 登录集成到我的 Android 应用程序中?

    大家好 实际上我需要通过我的应用程序从 google 登录人们 现在我阅读了 google 上的文档 其中指出 要允许用户登录 请将 Google Sign In 集成到您的应用中 初始化 GoogleApiClient 对象时 请求 PL

随机推荐

  • 网络音频 API 均衡器

    我一直在寻找使用 Web 音频 API 创建音频均衡器的方法 http webaudio github io web audio api http webaudio github io web audio api 我发现了很多关于创建可视化
  • 使用 StAXResult 调用 Transformer 时省略 XML 声明

    我想将多个 XML 节点从源 XML 文件复制到目标文件 源文件和目标文件都非常大 所以我将使用 StAX 通常 我尝试处理的文件如下所示
  • n 阶 B 树中可以容纳多少个元素?

    是2n吗 只是检查 术语 The Order文献中对 B 树的定义并不一致 例如参见维基百科有关 B 树的文章的术语部分 http en wikipedia org wiki Btree Terminology 一些作者认为它是minimu
  • 禁用右键单击后如何检查 chrome 中的元素?

    我想调试一个信息框 当我将鼠标悬停在谷歌地图标记上时显示该信息框 但谷歌地图禁用右键单击地图画布上的任何位置 因此我无法检查该元素以进行调试 查看目的 我尝试通过元素选项卡中的 href 内容搜索元素 但它没有显示在搜索中 尽管缺少右键单击
  • Oracle“创建表为”空值

    如果您使用 create as 创建一个 Oracle 表 其中某个字段为空 您将收到错误 ORA 01723 不允许零长度列 查询示例 create table mytable as select field a null brand n
  • 架构 i386 的重复符号[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在使用
  • jQuery 背景位置动画

    我创建了一个图像 它基本上是由 3 个图像组成的 CSS 精灵 它的大小是 278x123 所以它们基本上是 3 个 278x41 的图像 我想做的是通过改变背景位置来制作动画 我尝试了很多方法 我的一个不太有效的解决方案如下 var sl
  • Java/Mysql..SQLException:表必须至少有 1 列 SQLState:42000 VendorError:1113

    我有一个连接到数据库的应用程序 如果名称尚不存在 则创建一个表 并添加新的注册用户信息 以便我可以将密码散列到我的登录框架 并将它们与数据库进行匹配也将被散列 目前我有以下错误代码 SQLException A table must hav
  • 用类隐藏

    我确信这真的很简单 但这对我来说不起作用 我编写了一个表单 允许用户使用标签从列表中选择一个月
  • Python/WebApp Google App Engine - 测试标头中的用户/通行证

    当您像这样调用网络服务时 username test12 password test34 client httplib2 Http cache client add credentials username password URL htt
  • 检查 UTF-8 字符串在 Qt 中是否有效

    在 Qt 中 有没有办法检查字节数组是否是有效的 UTF 8 序列 看起来QString fromUtf8 http qt project org doc qt 5 0 qtcore qstring html fromUtf8默默地抑制或替
  • jQuery UI 自动完成中的自定义属性问题

    我在使用 jQuery UI 的自动完成功能时遇到了自定义属性的问题 由于某些奇怪的原因 自动完成功能不允许我使用 make 或 id 属性ui item make or ui item id 但在设置为时工作ui item label H
  • Typescript:如何期望精确的类实例作为函数参数

    Code 考虑以下代码 一个基类 两个子类 以及一个采用一个子类的一个实例的函数 abstract class AbstractNumberHolder constructor private readonly value number g
  • 使用 Jackson 从 POJO 创建 JSON 模式时,从 JSON 模式中删除“id”

    如何去掉id字段 id urn jsonschema org gradle 人 来自使用 Jackson 创建的 JSON 模式 生成的模式 type object id urn jsonschema org gradle Person p
  • 未捕获的类型错误:未定义不是 WordPress 中的函数(匿名函数)[重复]

    这个问题在这里已经有答案了 我收到以下错误 这似乎是 Javascript 未解释 符号 未捕获的类型错误 未定义不是函数 main js 1 匿名函数 main js 1 下面附加的是 main js 代码 这在某个时候工作得很好 我正在
  • BrowserSync Gulp 无法在 Chrome 中打开

    我尝试在 Chrome 中使用 BrowserSync 和 Gulp 在本地主机上打开我的网站 但它不起作用 默认情况下 它在 Firefox 中打开 一切正常 但是 当我更改 gulpfile js 中的参数以在 Chrome 中打开网站
  • iOS7 上的 TableViewCell 中不会显示复选标记

    我现在正在研究一个奇怪的问题 我的应用程序部署目标设置为 iOS6 因此我想同时支持 iOS6 和 iOS7 我只有一个简单的 UITableView 用户可以在其中选择首选的通知声音 代码为 UITableViewCell tableVi
  • 预测 git Push 中将推送多少数据

    我偶尔会使用昂贵的互联网连接 并且我想知道 至少大约 有多少数据将被推送到远程git push 事实上 我想我很喜欢我的评论 可以将其作为答案发布 当您推送时 git 会创建一个包含所有必需对象的包并将其上传到远程 这意味着我们正在寻找一种
  • 将 less 和 css 文件捆绑在一起

    我觉得捆绑应该用于将一堆一起使用的文件分组到一个交付给浏览器的文件中 这意味着对于我的根样式 我想做类似以下的事情 var bundle new StyleBundle Content style Include Content mysty
  • 网格/列表视图的概念如何将图像发送到 imageitem 类

    在我的项目中 我想加载 url 图像并在 gridview 活动中显示它们 但如何将这些图像加载到 gridview 适配器呢 所以我试图理解这个概念grid list view适配器 据我了解 在一个基本示例中 它包含 3 个活动 1 主