2011-08-25 55 views
0

一个观点我是比较新的结合,我理解CWAC-MergeAdapter的使用有一些问题。如何在Android的适配器和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

仅供参考,为GitHub库主页显示,您需要标记您的问题与'commonsware'为我一定去接他们。我会尽快调整你的标签列表。 “当我添加新视图时,我只在整个微调器中得到一个单一的空白条目” - 如果你在'MergeAdapter'上调用'getCount()'会发生什么?它会返回正确的数字吗? – CommonsWare

+0

感谢您指点!是:getCount()在添加适配器后返回1,在添加视图后返回2。但是,当我打开微调器时,仍然只有一条空行。 – Tilvia

+0

这很奇怪。如果您可以创建一个演示此错误的示例项目,我很乐意看看它。你可以从这个问题链接到它(如果你可以上传到某个地方)或者发送到mmurphy -at- commonsware.com。 – CommonsWare

回答

2

这是不可能的,我将永远支持添加个人ViewsMergeAdapterSpinner使用。这意味着我以某种方式知道如何为一些任意的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); 
} 

然后,而不是通过addView()添加个人View,添加自己的ArrayAdapter为您额外的数据。一定要打电话setDropDownViewResource()在所有适配器MergeAdapter里面 - 你的示例代码从来不叫这个,引起你的一些其他方面的困难(例如,“在微调一些条目是空白”)。

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


另外,请从您的代码删除所有出现getApplicationContext(),与thisWhateverYourActivityNameIs.this适当取代它。 只有使用getApplicationContext()当你知道为什么使用getApplicationContext()

+0

感谢您的建议,并花时间看看我的代码。我现在真的了解更多 - 并且该项目正在开展工作:)再次感谢。 – Tilvia