11

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

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

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

4

1 回答 1

10

我的假设是,在考虑任何一种情况之前,您已经将 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() 来匹配您的预期显示(毕竟,保持模型和视图逻辑分离绝不是一个糟糕的设计实践)。

策略二

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

这种策略更简单,但会迫使您将所有内容粉碎成一个字符串以进行显示。

ArrayAdapter<Profile> profileAdapter = new ArrayAdapter<Profile>(context, resource, profiles)
于 2011-11-19T08:29:45.887 回答