我在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);
答案 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()
,并将其替换为this
或WhateverYourActivityNameIs.this
。当您知道为什么使用getApplicationContext()
时,仅使用getApplicationContext()
。