0

我正在尝试使用 CommonsWare 的MergeAdapter课程并取得了有限的成功。特别是,我不确定 1)我ArrayAdapter是否适合使用,2)我是否正确添加它,以及 3)我是否正在做所有必要的事情来连接所有东西。

这是我的子类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()是显示了正确的标题文本,但它下面没有列表。

我哪里错了?

4

1 回答 1

1

我的 ArrayAdapter 适合使用

好像没问题。

如果我正确添加它

好像没问题。

如果我正在做所有必要的事情来连接所有东西

显然你没有任何疾病。

因为我添加了两件事——headingView()(被渲染)和适配器(默默地失败)

getCount()返回应该在您的 中的总行数ListView,而不是添加到MergeAdapter. 在您的情况下,您似乎没有任何疾病。

首先将您的PartnerDiseaseListAdapter直接放入您的ListView,忽略MergeAdapter. 让它工作。然后,切换回MergeAdapter.

于 2012-04-24T19:38:16.247 回答