如何在MergeAdapter中组合适配器和视图

时间:2011-08-25 07:55:21

标签: android spinner adapter commonsware-cwac

我在Android上比较新,在理解cwac-MergeAdapter的使用方面遇到了一些问题。

我正在尝试使用MergeAdapter来填充微调器;我的MergeAdapter实例应该包含一个SimpleCursorAdapter,它正确地从我的数据库读取数据,并且(作为页脚)一个应该可点击的新TextView(或Button)。

目前,如果我为微调器提供仅包含来自数据库的数据的mergeAdapter,那么一切都像魅力一样;但是,当我添加新视图时,我只在整个微调器中获得一个空白条目。有人可以帮帮我吗?

以下是代码:

essenceItems = new SimpleCursorAdapter(this, R.layout.db_row_view,
    essenceCursor, from, to);

    TextView addEssence = new TextView(getApplicationContext());
    addEssence.setTextColor(R.color.red);
    addEssence.setText("Add new item...");
    addEssence.setWidth(ViewGroup.LayoutParams.FILL_PARENT);
    addEssence.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
    addEssence.setOnClickListener(new OnClickListener() {

       public void onClick(View v) {
         startActivityForResult(new Intent(v.getContext(),
         EssencePopup.class), ADD_ESSENCE);

     }
     });
    ma = new MergeAdapter();
    ma.addAdapter(essenceItems);
    ma.addView(addEssence, true);
    spinner.setAdapter(ma);

1 个答案:

答案 0 :(得分:2)

我不太可能支持将个人Views添加到MergeAdapter以用于Spinner。这意味着我以某种方式知道如何为某些任意View创建一个下拉列表View

我为您提供的解决方法是将以下内容添加到MergeAdapter的分支中:

public View getDropDownView(int position, View convertView, ViewGroup parent) {
  for (ListAdapter piece : pieces) {
    int size = piece.getCount();

    if (position < size) {
      return (((SpinnerAdapter)piece).getDropDownView(position, convertView, parent));
    }

    position -= size;
  }

return (null);
}

然后,不是通过View添加个人addView(),而是为您的其他数据添加自己的ArrayAdapter。请务必在setDropDownViewResource()内的所有适配器上调用MergeAdapter - 您的示例代码从未调用此类代码,导致您的其他一些困难(例如,“微调器中的某些条目为空白”)。

我可能会将此更改合并到MergeAdapter中,或者可能会创建一个SpinnerMergeAdapter子类。盲人SpinnerAdapter让我感到害怕,这就是为什么我想更多地思考这个问题。在轻量级测试中,我上面的代码似乎工作正常。


另外,请从您的代码中删除所有出现的getApplicationContext(),并将其替换为thisWhateverYourActivityNameIs.this。当您知道为什么使用getApplicationContext()时,使用getApplicationContext()