【问题标题】:Is this ArrayAdapter suitable for use with CommonsWare MergeAdapter? If so, why is it not working?这个 ArrayAdapter 是否适合与 CommonsWare MergeAdapter 一起使用?如果是这样,为什么它不起作用?
【发布时间】:2012-04-24 19:23:44
【问题描述】:

我正在尝试使用 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
            }

我有Logged 数:

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

这将返回 1,我希望在此返回 2

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

我哪里错了?

【问题讨论】:

  • @Alex,因为我添加了两件事 - headingView()(已渲染)和 adapter(静默失败)。

标签: android android-arrayadapter android-adapter listadapter commonsware-cwac


【解决方案1】:

我的ArrayAdapter适合用

好像没问题。

如果我添加正确

好像没问题。

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

显然你没有任何疾病。

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

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

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

【讨论】:

  • 谢谢,你是对的。问题是清单。我傻不检查。是否有一种方法可用于获取添加到您的 MergeAdapter 的视图数量和适配器数量,或者这通常不会有用?
  • @jshin47:我没有获取添加片段帐户的方法,因为我没有看到或听说过需要。如果您有具体的场景,请在项目中提出问题。添加起来很简单,但我喜欢保持精简的 API。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 2017-09-29
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多