使用哪个适配器 - BaseAdapter或ArrayAdapter?

时间:2011-11-19 08:27:09

标签: android listview android-arrayadapter baseadapter

我有一个JSON字符串,其中包含以下

的多个实例
  1. 名称
  2. 消息
  3. 时间戳
  4. 个人资料照片网址
  5. 我想创建一个ListView,其中每个列表都具有上述内容。对于这种特殊情况,我需要扩展哪个更好的适配器,以创建自定义适配器?

1 个答案:

答案 0 :(得分:10)

我的假设是您在考虑任何一种情况之前已将JSON字符串解析为对象模型...让我们调用此类Profile。

策略1

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()以匹配您的预期显示(毕竟,保持模型和视图逻辑分离绝对不是一个糟糕的设计实践)。

策略2

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

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

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