我正在尝试确定让单个列表视图包含不同行样式的最佳方法。我知道如何创建自定义行+自定义数组适配器以支持整个列表视图的自定义行。但是listview如何支持许多不同的行样式?
答案 0 :(得分:0)
只需创建一个属性和myListView.addView('你的膨胀视图')
LayoutInflater inflater = LayoutInflater.from(this);
RelativeView myCustomView =(RelativeView)inflater.inflate(R.layout.task_since_user);
myListView.addView(myCustomView);
答案 1 :(得分:0)
既然你知道有多少种布局 - 可以使用这些方法。
getViewTypeCount() - 此方法返回信息列表中有多少行类型
getItemViewType(int position) - 返回基于位置
应使用的布局类型的信息然后,只有在布局为空时才会使布局膨胀,并使用getItemViewType确定类型。
请查看this tutorial以获取更多信息。
为了实现您在评论中描述的结构优化,我建议:
我希望这会对你有所帮助。如果您可以提供一些XML存根以及您的数据结构和信息,您希望如何将其映射到行中,我将能够为您提供更精确的建议。按像素。
答案 2 :(得分:0)
你必须写自定义适配器,扩展BasaAdapter。注意:viewTypeCount()。然后您可以使用条件来检查和分配不同的视图
private class MyAdapter extends BaseAdapter{
public static final int ITEM_TYPE_ONE = 1;
public static final int ITEM_TYPE_TWO = 2;
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
return (position % 2 == 0) ? ITEM_TYPE_ONE : ITEM_TYPE_TWO;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int itemTypeId = getItemViewType(position);
if (convertView == null) {
if (itemTypeId == ITEM_TYPE_ONE) {
convertView = inflater.inflate(R.layout.layout_one, parent, false);
} else {
convertView = inflater.inflate(R.layout.layout_two, parent, false);
}
}
}
}