2016-09-01 8 views
0

Я хочу создать пользовательский адаптер для просмотра списка. Это мой JSON:Пользовательский адаптер ListView с делителем

{ 
    "Model": [{ 
     "Group": "Group 1", 
     "person": [{ 
      "Name": "Name 1", 
      "Country": "Country 1" 
     }] 
    }, { 
     "Group": "Group 2", 
     "person": [{ 
      "Name": "Name 1", 
      "Country": "Country 1" 
     }, { 
      "Name": "Name 2", 
      "Country": "Country 2" 
     }] 
    }], 
    "Success": true 
} 

Проблема заключается в том, что есть 2 JSON группа, и я хочу перечислить ребенок каждой группы. Кроме того, для каждого ребенка мне нужно показать своего рода разделитель для разделения каждой группы.

Это мой пользовательский ListView адаптер:

public class GroupListAdapter extends BaseAdapter { 

Context context; 
ArrayList<GroupModel> groupList; 

public GroupListAdapter(Context context, ArrayList<GroupModel> groupList){ 
    this.context    = context; 
    this.groupList = groupList; 
} 

@Override 
public int getCount() { 
    return groupList.size(); 
} 

@Override 
public Object getItem(int position) { 
    return groupList.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

static class ViewHolder{ 
    private TextView txtName; 
    private TextView txtCountry; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder viewHolder; 
    if(convertView == null){ 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.fila_contacto, null); 
     viewHolder = new ViewHolder(); 

     viewHolder.txtName = (TextView) convertView.findViewById(R.id.txtName); 
     viewHolder.txtCountry = (TextView) convertView.findViewById(R.id.txtCountry); 

     convertView.setTag(viewHolder); 
    }else{ 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    return convertView; 
} 
} 

GroupList.java

public class GroupModel implements Serializable { 
    public String DescriptionDivider; 
    public ArrayList<ChildModel> ChildModel; 
} 

ChildModel

public class ChildModel implements Serializable { 
public String Name; 
public String Country; 
} 

EDIT: Также, когда я передаю список групп адаптеру, работает только с дочерним элементом первой группы.

EDIT 2: Сейчас в моей группе адаптер я добавил ListView:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder viewHolder; 
    if(convertView == null){ 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.fila_contacto, null); 
     viewHolder = new ViewHolder(); 
     GroupList groupList = groupList.get(position); 

     viewHolder.txtName = (TextView) convertView.findViewById(R.id.txtName); 
     viewHolder.lstChild = (ListView) convertView.findViewById(R.id.lstChild); 

     listViewChildAdapter childAdapter= new listViewChildAdapter (this.context, groupList.ChildModel); 
     lstChild.setAdapter(childAdapter); 

     convertView.setTag(viewHolder); 
    }else{ 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    return convertView; 
} 

EDIT 3: Добавление ListViewChildAdapter

public class listViewChildAdapter extends BaseAdapter { 

Context context; 
ArrayList<ChildModel> childList; 

public listViewChildAdapter(Context context, ArrayList<ChildModel> childList){ 
    this.context = context 
    this.childList = childList; 
} 

static class ViewHolder{ 
    private TextView txtName; 
    private TextView txtCountry; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder viewHolder; 
    if (convertView == null) { 
     convertView = LayoutInflater.from(getContext()).inflate(R.layout.child_row, parent, true); 
     viewHolder = new ViewHolder(); 

     viewHolder.txtName = (TextView) convertView.findViewById(R.id.txtName); 
     viewHolder.txtCountry = (TextView) convertView.findViewById(R.id.txtCountry); 


     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    ChildModel child = childList.get(position); 

    // region Campos NO NULLEABLES 
    viewHolder.txtName.setText(child.Name); 
    viewHolder.txtCountry.setText(child.Country); 
    // endregion 

    return convertView; 
} 
} 

Спасибо за помощь

+0

вы можете попробовать это, если (jsonObject.has («Группа 1»)) –

+0

@ Химани Где я должен это поставить? Также, когда я передаю адаптеру список группы, адаптер работает только с дочерним элементом для первой группы –

+0

эй, вы можете поместить весь дочерний объект в один список во время разбора и просто показать их с помощью 'ListView'. Разве это не решит вашу проблему? – himanshu1496

ответ