大家好!
我想創建一個具有相同行佈局的listView。但我正在動態改變行的元素。從上面的圖中,你可以看到我用行填充了我的listView,但是行的按鈕將不得不根據行的類型而不同。行中的其餘信息是相同的。
有沒有一種方法,我可以通過一個標誌到適配器,使其添加/刪除佈局基於行的類型的元素?我的適配器擴展爲BaseAdapter
。
大家好!
我想創建一個具有相同行佈局的listView。但我正在動態改變行的元素。從上面的圖中,你可以看到我用行填充了我的listView,但是行的按鈕將不得不根據行的類型而不同。行中的其餘信息是相同的。
有沒有一種方法,我可以通過一個標誌到適配器,使其添加/刪除佈局基於行的類型的元素?我的適配器擴展爲BaseAdapter
。
是的,讓你的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;
}
此信息應該包含在適配器知道的模型中。
在getView(..)
方法中,您應該能夠檢查<model>.getType()
是否是特定類型。如果是這樣,您可以設置佈局中特定組件的可見性並相應地更改UI。
如果類型不是響應的一部分,您可以在適配器內部保留Map<Model, Type>
,並在有新數據時更新適配器,並且有一個方便的方法將其轉換爲模型對象列表以顯示UI。