0

我正在尝试使用CommonsWare的MergeAdapter类并取得了有限的成功。特别是,我不确定是否1)我的ArrayAdapter适合使用,2)如果我正确添加它,3)如果我正在做所有必要的事情来连接一切。这个ArrayAdapter适合与CommonsWare MergeAdapter一起使用吗?如果是这样,为什么它不起作用?

这里是我的ArrayAdapter子类:

class PDLAdapter extends ArrayAdapter<PartnerDisease> { 

    public PDLAdapter(final Context context) { 
     super(context, 0); 
    } 

    @Override 
    public View getView(final int position, View convertView, final ViewGroup parent) { 
     ViewHolder viewHolder; 

     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.partnerdisease_list_item, null); 
      viewHolder = new ViewHolder(convertView); 
      convertView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 

     viewHolder.populateViews(getItem(position)); 

     return convertView; 
    } 

} 

这里是我的对象StructuredSubDisease(这个名字是没有意义的,如果你真的认为这是一个包含子病的顶级对象,但不管):

class StructuredSubDisease { 
    public String headingText; 
    public ArrayList<PartnerDisease> subDiseases; 

    public View headingView() { 
     View returnView = mInflater.inflate(R.layout.partnerdisease_list_item, null); 
     TextView t = (TextView) returnView.findViewById(R.id.tv_displayname); 
     t.setText(headingText); 
     return returnView; 
    } 
} 

......这里是“魔法”应该发生的地方。

  for (StructuredSubDisease s : subDiseaseList) { 
       mMergeAdapter.addView(s.headingView()); // @Alex, <--- thing 1 

       PartnerDiseaseListAdapter adapter = new PartnerDiseaseListAdapter(this); 

       for (PartnerDisease p : s.subDiseases) { 
        adapter.add(p); 
       } 

       mMergeAdapter.addAdapter(adapter); // <--- and thing 2 
      } 

Log盖德计数:

Log.i("mergecount", "" + mMergeAdapter.getCount()); 

这将返回1,在那里我会想到2

编辑:我忘了提及,这是headingView()显示与正确的标题文本,但它下面没有列表。

我哪里错了?

+0

为什么期望2? – 2012-04-24 19:30:54

+0

@Alex,因为我添加了两个东西 - headingView()(它被呈现)和'adapter'(它默默地失败)。 – 2012-04-24 19:34:18

回答

1

我ArrayAdapter是适合

似乎确定。

如果我正确

加入它似乎确定。

,如果我做的一切必要接线的一切行动

你没有任何疾病,显然。

,因为我加了两个东西 - headingView()(这是渲染)和该适配器(即静静地失败)

getCount()返回应该在你的ListView总的行数,不添加到MergeAdapter的东西的数量。就你而言,看起来你没有疾病。

首先将PartnerDiseaseListAdapter直接放入ListView,忽略MergeAdapter。得到那个工作。然后,切换回MergeAdapter

+0

谢谢,你说得对。问题是这个清单。愚蠢的我不检查。是否有一种方法可用于获取添加到“MergeAdapter”的视图+适配器的数量,或者是一些通常无用的内容? – 2012-04-24 20:32:09

+0

@ jshin47:我没有办法获得添加件的帐户,因为我没有看到或听说过需要。如果您有具体的场景,请在项目上提出问题。添加它很简单,但我喜欢保持精益API。 – CommonsWare 2012-04-24 20:38:09