2015-10-29 3 views
0

enter image description hereListView - Редактирование строчной разметки

Привет всем!

Я пытаюсь создать listView с тем же расположением строк. Но я динамически меняю элементы строки. Из приведенной выше диаграммы видно, что я заполняю список ListView строками, но тогда кнопки в строке должны быть разными в зависимости от типа строки. Остальная часть информации в строке такая же.

Есть ли способ передать флаг в адаптер, чтобы он добавлял/удалял элементы из макета в зависимости от типа строки? Мой адаптер расширяет BaseAdapter.

ответ

1

Да, сделайте, чтобы ваш адаптер ListView взял модель, содержащую флаг как таковой в моем ответе. Это должно работать, если вы конвертируете свой объект JSON в конкретный POJO с помощью парсера, такого как GSON. Если вы пытаетесь загрузить свой адаптер из объекта 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() конкретным. Если это так, вы можете установить видимость определенных компонентов в своем макете и соответственно изменить интерфейс.

Если тип не является частью вашего ответа, вы можете сохранить внутри адаптера Map<Model, Type> и обновить адаптер, когда у вас есть новые данные, и иметь удобный метод для преобразования этого в список объектов модели для отображения в пользовательский интерфейс.

Смежные вопросы