如何在基于Cursor数据的自定义CursorAdapter中使用不同的行布局?

Gle*_*ger 0 android listview android-cursoradapter

背景:我正在尝试在我的应用程序中实现一个消息系统,我正在编写一个自定义CursorAdapterListView在聊天窗口中显示消息.我想为传入和传出消息使用不同的行布局(保存在游标的SQLite行中的信息).每行中具有相同ID的相同元素,但它们的排列方式不同.

问题:目前,我已经覆盖newView()并且bindView().在当ListView第一填充时,它会创建所有的View小号完美,检查每一行,看它是否是传入或传出,并膨胀正确的XML文件.但是,当我滚动或向窗口添加新消息时,适配器会回收View错误的行.我会覆盖getView(),但它不Cursor作为参数传递,所以我无法知道该行是传入还是传出.

我不是在寻找代码,而是寻找优雅实现的一些建议.提前致谢!

hac*_*bod 5

这有两种可能的解决方案:

(1)对所有项目使用单一布局,您可以在绑定时调整以根据需要显示.最直接的方法就是让根视图成为一个FrameLayout,其中包含每个不同状态的N个子节点,并且在绑定时使其中一个可见,所有其他节点都消失.当然,您要注意不要让它导致您的项目在其包含的视图数量中爆炸.

(2)实现Adapter.getItemViewType()http://developer.android.com/reference/android/widget/Adapter.html#getItemViewType (int)告诉列表视图有关您拥有的不同类型的项目,以便它将回收正确的.