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;
}