ListView - 修改行布局
ListView - Modifying row layout
大家好!
我正在尝试创建一个具有相同行布局的 listView。但我正在动态更改行的元素。从上图中,您可以看到我用行填充了我的 listView,但是行上的按钮必须根据行的类型而有所不同。该行的其余信息相同。
有没有一种方法可以将标志传递到适配器中,使其成为基于行类型的布局中的add/remove个元素?我的适配器扩展 BaseAdapter
.
此信息应该包含在适配器知道的模型中。
在 getView(..)
方法中,您应该能够检查 <model>.getType()
是否为特定类型。如果是这样,您可以设置布局中特定组件的可见性并相应地更改 UI。
如果类型不是您的响应的一部分,您可以在适配器中保留一个 Map<Model, Type>
并在有新数据时更新适配器,并有一个方便的方法将其转换为列表UI 中显示的模型对象。
是的,让您的 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;
}
大家好!
我正在尝试创建一个具有相同行布局的 listView。但我正在动态更改行的元素。从上图中,您可以看到我用行填充了我的 listView,但是行上的按钮必须根据行的类型而有所不同。该行的其余信息相同。
有没有一种方法可以将标志传递到适配器中,使其成为基于行类型的布局中的add/remove个元素?我的适配器扩展 BaseAdapter
.
此信息应该包含在适配器知道的模型中。
在 getView(..)
方法中,您应该能够检查 <model>.getType()
是否为特定类型。如果是这样,您可以设置布局中特定组件的可见性并相应地更改 UI。
如果类型不是您的响应的一部分,您可以在适配器中保留一个 Map<Model, Type>
并在有新数据时更新适配器,并有一个方便的方法将其转换为列表UI 中显示的模型对象。
是的,让您的 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;
}