android - 使用哪个适配器 - BaseAdapter 还是 ArrayAdapter?

标签 android listview android-arrayadapter baseadapter

我有一个包含以下多个实例的 JSON 字符串

  1. 姓名
  2. 留言
  3. 时间戳
  4. 个人资料照片网址

我想创建一个 ListView,其中每个列表都包含上述内容。对于这种特殊情况,我需要扩展哪个更好的适配器来创建自定义适配器?

最佳答案

我的假设是,在考虑任何一种情况之前,您已经将 JSON 字符串解析为对象模型……让我们称这个类为 Profile。

策略一

ArrayAdapter 有一个覆盖的 getView(..) 方法就足够了,该方法将按照您希望的方式将您的多个字段连接在一起。

ArrayAdapter<Profile> profileAdapter = new ArrayAdapter<Profile>(context, resource, profiles) {
   @Override
   public View getView(int position, View convertView, ViewGroup parent) {
      View v;
      // use the ViewHolder pattern here to get a reference to v, then populate 
      // its individual fields however you wish... v may be a composite view in this case
   }
}

我强烈建议对可能很大的列表使用 ViewHolder 模式: https://web.archive.org/web/20110819152518/http://www.screaming-penguin.com/node/7767

它产生了巨大的变化。

  • 优势 1. 允许您对 ListView 上的每个项目应用复杂的布局。
  • 优势 2。不需要您操作 toString() 来匹配您的预期显示(毕竟,将模型和 View 逻辑分开从来都不是一个糟糕的设计实践)。

策略 2

或者,如果您的代表类的 toString() 方法已经具有可接受显示的格式,您可以使用 ArrayAdapter 而无需覆盖 getView()。

此策略更简单,但会强制您将所有内容粉碎成一个字符串以供显示。

ArrayAdapter<Profile> profileAdapter = new ArrayAdapter<Profile>(context, resource, profiles)

关于android - 使用哪个适配器 - BaseAdapter 还是 ArrayAdapter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8192827/

相关文章:

java - 要求用户切换到新包的最愉快方式(删除实际应用程序并安装新应用程序)

android - 如何检查在 Android Lollipop 上授予 SYSTEM_ALERT_WINDOW 权限?

java - 与列表位置和微调器位置进行比较

java - 重写自定义 ArrayAdapter 删除迭代器

Android - 微调器文本颜色更改不起作用

Android 自定义微调器未填充

android - 类 'kotlin.Unit' 是使用不兼容的 Kotlin 版本编译的。其元数据的二进制版本是1.6.0,预期版本是1.1.15

android - android中的Listview检索

java - 安卓ListView报错

android - ListView header 占据一个位置是否有充分的理由?