网格/列表视图的概念如何将图像发送到 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 类 的相关文章

  • 在我的 Android 应用程序中使用 ServerValue.TIMESTAMP

    我读过很多相关的 stackoverflow 问题 ServerValue TIMESTAMP 但我不知道如何在我的应用程序中使用它 我需要获取帖子创建的时间戳 时间戳应该添加到与帖子的 uid 作者等相同的位置 代码片段其中写这篇文章Fi
  • 我在哪里可以获得可靠的熵来源(真正的随机性字节[])?

    目前 我正在寻找一种方法来增加随机性的质量 in my Android应用程序 纸牌游戏 之前 估计对于我的情况 52 排列 至少需要 226 位熵 226 个随机位 我打算用这个byte 作为种子SecureRandom SecureRa
  • 需要使用手机后退按钮返回 Web 视图的帮助

    这是我的代码 package com testappmobile import android app Activity import android os Bundle import android view KeyEvent impor
  • Android 中的 Sugar ORM:更新 SQLite 中保存的对象

    我是在 Android 上使用 SQLite 和 Sugar ORM 进行应用程序开发的新手 并尝试阅读 Sugar ORM 文档 但没有找到有关如何更新 SQLite 中保存的对象的任何信息 更改对象属性后还可以保存对象吗 就像是 Cus
  • 如何访问android库项目中的资源

    我正在构建一个 android 库项目 它内部需要一些静态资源 图像 xml 等 然后我想知道我可以把这些资源放在哪里以及如何访问它们 既然我把资源放到了assets文件夹 我使用 AssetManager 来访问资源 public cla
  • Android:如何使用后台线程?

    我开发了一个应用程序 它从互联网获取内容并相应地在设备的屏幕上显示它 该程序运行得很好 就是有点慢 加载并显示内容大约需要 3 4 秒 我想将获取内容并将其显示在后台线程中的所有代码放在一起 当程序执行这些功能时 我想显示一个进度对话框 你
  • Android 版 jTwitter 授权错误

    我在我的 Android 应用程序中使用 jTwitter 库 直到前天一切都运转良好 但今天遇到异常 服务提供商响应错误 301 请帮助我 这是堆栈跟踪 02 21 21 07 27 258 E AndroidRuntime 4013 F
  • 在 Android Lollipop 中从 Uri 中裁剪照片后总是返回 Null?

    我尝试在拍照或挑选照片后从 Uri 中裁剪图像 我的代码是这样的 public static void cropImage Uri uri Activity activity int action code Intent intent ne
  • Android Fragment onCreateView 与手势

    我正在尝试在片段中使用手势 我在 FragmentActivity 中有以下内容来处理我的详细信息片段 我试图发生的情况是 当在视图上检测到滑动时 将该视图内的数据替换为上一个或下一个条目 如果有更好的方法来处理这个问题 我完全同意 然而
  • 使用 Android Studio 进行调试永远停留在“等待调试器”状态

    UPDATE The supposed重复是一个关于陷入 等待调试器 执行时Run 而这个问题就陷入了 等待调试器 执行时Debug 产生问题的步骤不同 解决方案也不同 每当我尝试使用Android Studio的调试功能时 运行状态总是停
  • 如何从android中的外部存储中获取所选文件的文件路径?

    我在选择文件的文件路径时遇到问题 我搜索了整个堆栈溢出 但问题没有解决 从设备中选择文件的代码如下所示 Intent intent new Intent Intent ACTION GET CONTENT intent setType in
  • 如何制作在手机和平​​板电脑上使用的响应式Android应用程序?

    我创建了一个 Android 应用程序 当我运行我的应用程序时Mobile Phone它工作得很好 但是当我跑进去时Tablet应用程序的布局已更改 那么 如何制作响应式Android应用程序用于Mobile并且也在Tablet 在Andr
  • Android 纹理仅显示纯色

    我正在尝试在四边形上显示单个纹理 我有一个可用的 VertexObject 它可以很好地绘制一个正方形 或任何几何对象 现在我尝试扩展它来处理纹理 但纹理不起作用 我只看到一种纯色的四边形 坐标数据位于 arrayList 中 the ve
  • Android 中的列表视图分页

    我有一个列表视图 其中显示了 50 个元素 我决定对视图进行分页 以便视图的每个部分都有 10 个元素 然后单击 下一个 按钮以获取下一个 10 个元素 如何设置10个数据 我关注这篇文章http rakhi577 wordpress co
  • 是否可以使用 CardView 为浮动操作按钮制作阴影?

    I know CardView不是为此而设计的 但理论上如果cardCornerRadius view size 2它应该导致圆圈 我错过了什么吗 绘制真实的动画阴影并不困难 您可以尝试在 Froyo 等任何 Android 设备上实现 L
  • 如何构建自定义摄像机应用程序?

    我正在尝试开发一个自定义摄像机录像机 当我的设备在 Activity 的 beginRecording 中执行 start MediaRecorder 方法时 应用程序崩溃 我不知道出了什么问题 因为我遵循谷歌API指南 http deve
  • 我在 PopupMenu 中使用 ShareActionProvider,但显示两个 PopupMenu?

    我在 PopupMenu 中使用 ShareActionProvider 但是当我单击共享菜单项时 它会在屏幕上显示两个 PopupMenus 一个被另一个覆盖 一个显示应用程序图标和名称 另一个仅显示应用程序名称 除了这个问题之外 它工作
  • Android Root 执行 su 带参数

    我在使用参数执行 su 时遇到问题 包含空格 我的 Command java 看起来像这样 public class Command Process process public String executeCommand String c
  • 由于“进程崩溃”,仪器运行失败。

    我想运行以下测试 package com xxx yyy import android content Context import androidx test InstrumentationRegistry import androidx
  • Android AdMob:addView 在返回活动之前不会显示广告

    我正在尝试在游戏顶部添加横幅广告 我的活动使用带有自定义 SurfaceView 的relativelayout 我希望广告与 SurfaceView 重叠 广告会加载并可点击 但不会绘制到屏幕上 当我离开活动并返回时 会绘制广告 例如 通

随机推荐

  • 网络音频 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 主