【发布时间】:2010-06-29 20:41:58
【问题描述】:
有没有办法制作一个包含不同视图的列表? 我的意思是位置 X 中的行将具有布局“X.xml” 并且行号 Z 将具有布局“Y.xml”?
我尝试了几种方法来操作 ListRowAdapter() 和 getView() 但没有成功...
【问题讨论】:
-
@user379425 你能不能选择 CommonsWare 的答案是正确的(假设它按照它所说的那样做)
有没有办法制作一个包含不同视图的列表? 我的意思是位置 X 中的行将具有布局“X.xml” 并且行号 Z 将具有布局“Y.xml”?
我尝试了几种方法来操作 ListRowAdapter() 和 getView() 但没有成功...
【问题讨论】:
你好,有没有办法用 不同的看法?我的意思是那一行 位置 X 将具有布局“X.xml” 并且行号 Z 将具有布局 “Y.xml”?
当然。
第 1 步:通过扩展 BaseAdapter、ArrayAdapter、CursorAdapter 等创建一个 Adapter 类。
第 2 步:实现 getViewTypeCount() 以返回有多少不同的行类型
步骤#3:实现getItemViewType()以返回一个介于0和getViewTypeCount()返回的值之间的数字,指示给定位置将使用哪种行类型
第 4 步:覆盖 getView()(或 newView() 和 bindView() for CursorAdapter)并让它创建正确的行
【讨论】:
我认为没有一种简单的方法可以开箱即用。根据您的布局有多么不同,您可能会想出一个布局,然后根据行在 getView 中显示或隐藏它的元素。如果您将某个项目设置为 Layout.GONE,就好像它不存在一样。
【讨论】:
我用另一种方式解决了它: 在 ListRowAdapter -> getView() 我在充气机上做了一个 if() 声明:
LayoutInflater inflater=context.getLayoutInflater();
View row=inflater.inflate(R.layout.X, null);
if(somthing)
{
row=inflater.inflate(R.layout.Y, null);
//whatever
}
and in the end: return row;
像魅力一样工作:)
【讨论】: