大家好!
我正在尝试创建一个具有相同行布局的listView。但我正在动态更改行的元素。从上图中,您可以看到我使用行填充listView,但行上的按钮必须根据行的类型而不同。行中的其余信息是相同的。
有没有办法可以将标志传递给适配器,以便根据行类型添加/删除布局中的元素?我的适配器扩展了BaseAdapter
。
答案 0 :(得分:1)
此信息应包含在适配器知道的模型中。
在getView(..)
方法中,您应该能够检查<model>.getType()
是否是特定类型。如果是这样,您可以设置布局中特定组件的可见性并相应地更改UI。
如果类型不是您的响应的一部分,您可以在适配器中保留Map<Model, Type>
并在有新数据时更新适配器,并且有一个方便的方法将其转换为模型对象列表在UI中显示。
答案 1 :(得分:1)
是的,让我的ListView适配器在我的回答中采用包含标志的模型。 如果要使用GSON等解析器将JSON对象转换为特定的POJO,这应该可以工作。如果您尝试从JSON对象加载适配器,我建议不要这样做,祝您好运。
public class Row{
private RowType rowType;
//all other row attributes
}
public enum RowType{
YesNo, Cancel, //all other possible scenarios
}
public class YourAdapter extends BaseAdapter{
private List<Row> rowsToPopulate;
//Override appropriate methods
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//load your view etc....
//Check the flag to load appropriate fragment
switch(rowsToPopulate.get(position).getRowType()){
case YesNo:
//Load your yes no fragment to your row view
case Cancel:
//Load your cancel fragment to your row view
}
return yourView;
}