listview 与 arraylist,android 中的简单适配器

2023-11-25

我尝试使用 arraylist 和简单适配器在列表视图中显示一些内容。 我尝试了类似下面的操作,但结果显示了数组列表的姓氏。 我有什么错我无法理解。

final ListView listView = (ListView) findViewById(R.id.mylist);

    ArrayList<HashMap<String, String>> list_of_bookmarks = new ArrayList<HashMap<String, String>>();

        HashMap<String, String> b = new HashMap<String, String>();

        String[] from = { "php_key","c_key","android_key","hacking_key" };
        String[] name_of_bookmarks = { "php","c","android","hacking" };

            for(int i=0;i<4;i++)
            {
              b.put(from[i],name_of_bookmarks[i]);   
              list_of_bookmarks.add(b);
            }

         };

            int[] to = { R.id.txt1,R.id.txt1,R.id.txt1,R.id.txt1};

            SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), list_of_bookmarks, R.layout.list_layout, from, to);         
            listView.setAdapter(adapter);

我只想在列表视图中显示“php”、“c”、“android”、“hacking”。 什么应该是更有效的方法来做到这一点。我是初学者,所以你可能会建议我应该遵循的更好的方法


我给你的建议是创建一个单独的类来扩展适配器(或其某些子类)

这是字符串数组适配器的一个简单示例。

package ro.gebs.captoom.adapters;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import antistatic.spinnerwheel.adapters.AbstractWheelTextAdapter;

import com.example.captoom.R;

public class LanguagesAdapter extends AbstractWheelTextAdapter {
    // Countries names
    private String languages[];

    public LanguagesAdapter(Context context) {
        super(context, R.layout.lang_item, NO_RESOURCE);
        languages = context.getResources().getStringArray(R.array.lang_array);
        setItemTextResource(R.id.language_txt);
    }

    @Override
    public View getItem(int index, View cachedView, ViewGroup parent) {
        View view = super.getItem(index, cachedView, parent);
        return view;
    }

    @Override
    public int getItemsCount() {
        return languages.length;
    }

    @Override
    protected CharSequence getItemText(int index) {
        return languages[index];
    }
}

而且使用方法很简单,只需使用该方法即可.setAdapter();

或者另一个使用 arrayAdapter 的示例:

package apc.example;

import java.util.ArrayList;

import utils.BitmapManager;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class PersonAdapter extends ArrayAdapter<Person> {

    Context context;
    int layoutResourceId;
    ArrayList<Person> data = null;

    public PersonAdapter(Context context, int layoutResourceId,
            ArrayList<Person> 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;
        ItemHolder holder = null;

        if (row == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);

            holder = new ItemHolder();
            holder.imgIcon = (ImageView) row.findViewById(R.id.icon);
            holder.txtName = (TextView) row.findViewById(R.id.title);
            holder.txtDescription = (TextView) row.findViewById(R.id.desc);

            row.setTag(holder);
        } else {
            holder = (ItemHolder) row.getTag();
        }

        Person bean = data.get(position);
        holder.txtName.setText(bean.getName());
        holder.txtDescription.setText(bean.getDescription());


        Bitmap b = BitmapFactory.decodeResource(context.getResources(), R.drawable.user);
        BitmapManager.INSTANCE.setPlaceholder(b);
        BitmapManager.INSTANCE.loadBitmap(bean.getUrl(), holder.imgIcon, 80, 80);

        return row;
    }

    public static class ItemHolder {
        public ImageView imgIcon;
        TextView txtName;
        TextView txtDescription;
    }

    public void updateAdapter(ArrayList<Person> pers){
        this.data = pers;
    }
}

这是一个更复杂的类的适配器示例,该类具有更多字段而不是简单的字符串。但这可以很容易地修改为ArrayAdapter<String>然后从那里开始。

无论如何,我认为为列表视图编写自定义适配器始终是最佳实践。

希望这可以帮助!

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

listview 与 arraylist,android 中的简单适配器 的相关文章

随机推荐

  • 哪个是正确的:向量或const向量

    哪个是对的 vector
  • 在 mono 中编译的 C# - 检测操作系统

    我正在尝试让一个 C 应用程序在 OSX 下运行 但这并不是完全没有痛苦 为了在短期内解决一些问题 我正在考虑在 OSX 中运行时设置一些特定的规则 但是 我可以使用什么来确定应用程序是在 Windows 还是 OSX 下运行 来自单声道w
  • 线程本地存储变量的地址

    好吧 说我有 thread int myVar 然后我将 myVar 从一个线程传递到另一个线程 如果数据确实是 本地 那么 1 个线程的 TLS 存储可能不会映射到其他线程地址空间 事实上 您可能会认为它不应该是 这会导致 SIGSEGV
  • Git 没有将 gpg 密钥视为秘密,即使它是秘密,我该如何修复它?

    所以看来我的 gpg 密钥是秘密的 但是当我尝试在 git 中签署我的提交时 它不会被识别为秘密 我完全不知道这是为什么 我相信我的设置正确 但我的提交标志失败 难道我做错了什么 预先感谢您的任何帮助 brad reason entry c
  • std::shared_ptr 在空指针上调用非默认删除器

    看这个例子 include
  • 我想从使用 c# 运行的 Windows 盒子通过 ssh 运行命令

    请注意 这必须位于 Windows 盒子上 因为我正在使用 C 来访问有关 Windows 的信息 我需要来自 Windows 盒子和 Linux 盒子的信息 另外我认为制作一个无需 GUI 运行并在没有用户干预的情况下从 Linux 盒子
  • 在 xCode 5 / iOS7 中使导航栏拉伸到状态栏后面

    我按照以下教程将导航栏向下移动 这样它就不会被 xcode 5 ios7 中的状态栏覆盖 iOS7状态栏和导航栏问题 但现在在 iOS7 中 状态栏所在的顶部有一个空白区域 我希望导航栏也能填充这个区域 例如 Facebook twitte
  • HTML WYSIWYG 编辑器:为什么可编辑内容移动到 iFrame 中

    为什么可编辑的 html 被移到 iFrame 中 我分析了不同的编辑器 TinyMce CKEditor 等 并将所有可编辑内容移动到一个单独的 iFrame 中 并将其覆盖在原始文本上 这是什么技术原因 我尝试过contentedita
  • Casperjs:如何打印http请求和响应?

    出于调试目的 我需要查看整个请求 标头和数据 我怎样才能实现这个目标 Casper 好吧 实际上是 PhantomJS 提供了两个回调 一个当资源被请求时 您可以在其中看到正在发送的标头 以及何时收到回复 这样你就可以看到服务器回复的标头
  • 带有固定部分标题的 PullToRefresh 列表

    有没有人有使用实践Pull to refresh列出与Pinned section header I use Android PullToRefreshlib 与我的列表 我想添加在列表顶部显示固定节标题的功能 我用了固定标题列表视图另一个
  • 命令提示符不会将目录更改到另一个驱动器

    我正在尝试编译一些java 当前正在学习java 为此我需要更改命令提示符的目录 C Admin gt cd D Docs Java C Admin gt cd C Admin 它不会更改目录 我再次尝试使用引号 C Admin gt cd
  • jQuery - 如何在事件触发后暂时禁用 onclick 事件侦听器?

    在事件触发后 如何暂时禁用 onclick 事件侦听器 首选 jQuery Example 用户单击按钮并触发下面的此函数后 我想禁用 onclick 侦听器 因此不会向我的 django 视图触发相同的命令 btnRemove click
  • 什么是 Json.NET Mono 程序集参考?

    我正在尝试编译此 Json NET 代码 using Newtonsoft Json MyDesc d JsonConvert DeserializeObject
  • 仅使用蓝牙选项共享意图

    我正在尝试使用我的应用程序通过蓝牙发送文件 我已经将 mime 类型更改为随机的 asdxasd asdxa 该文件有一个我需要使用的扩展名 即 sso 当我使用共享意图时 它只出现蓝牙和 gmail 选项 但我不能从列表中删除 gmail
  • 异常过滤器在 Web api 中不起作用

    我有一个自定义异常过滤器 能够处理控制器中的所有错误 只是一个常见的错误处理机制 public class ExceptionHandlingAttribute ExceptionFilterAttribute public overrid
  • 如何在Tomcat上安装和使用CDI?

    我正在创建我的第一个项目 Java EE 7 但遇到了麻烦 感谢任何帮助 雄猫7 0 34 JSF 2 2 Primefaces 3 5 javaee api 7 0 jar 当应用程序启动时 Tomcat 日志显示以下消息 validat
  • 回调函数触发得太早

    我在 jQuery 中有这个简单的函数 function detailspage page if page checkcurrent checkcurrent page div details children div slideUp sl
  • 如何打印列表中的类型

    所以我得到了一个列表 我必须打印列表中每个项目的类型 我可以清楚地看到有字符串和整数 但我需要它在 Python 中打印出来 我们刚刚了解到for 循环所以我觉得这就是他们正在寻找的东西 但我无法将其打印出来 ls type item fo
  • 在使用 ZEIT Now 部署的 Next.js 应用程序中使用绝对导入

    在 Next js 9 教程中建议的方法导入共享组件是通过相对路径 比如 import Header from components Header 我想使用绝对导入 例如 import Header from components Head
  • listview 与 arraylist,android 中的简单适配器

    我尝试使用 arraylist 和简单适配器在列表视图中显示一些内容 我尝试了类似下面的操作 但结果显示了数组列表的姓氏 我有什么错我无法理解 final ListView listView ListView findViewById R