2015-10-29 126 views
0

enter image description hereListView - 修改行佈局

大家好!

我想創建一個具有相同行佈局的listView。但我正在動態改變行的元素。從上面的圖中,你可以看到我用行填充了我的listView,但是行的按鈕將不得不根據行的類型而不同。行中的其餘信息是相同的。

有沒有一種方法,我可以通過一個標誌到適配器,使其添加/刪除佈局基於行的類型的元素?我的適配器擴展爲BaseAdapter

回答

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

此信息應該包含在適配器知道的模型中。

getView(..)方法中,您應該能夠檢查<model>.getType()是否是特定類型。如果是這樣,您可以設置佈局中特定組件的可見性並相應地更改UI。

如果類型不是響應的一部分,您可以在適配器內部保留Map<Model, Type>,並在有新數據時更新適配器,並且有一個方便的方法將其轉換爲模型對象列表以顯示UI。