0

我是 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);
4

1 回答 1

2

我不太可能支持将个人添加Views到 aMergeAdapter以在 a 中使用Spinner。这意味着我以某种方式知道如何View为一些任意的View.

我为您提供的解决方法是让您将以下内容添加到您的 fork 中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().

于 2011-08-25T17:04:46.893 回答