Reputation: 459
So I have been able to show the group text, however when I expand im not sure how to get the child text.
List<TeamObject> listDataDoc;
HashMap<TeamObject, List<DoctorObject>> listDataChildStaff;
Im passing listDataDoc and ListDataChildStaff into my adapter. In my main activity:
listAdapter = new ExpandableListAdapter(this, listDataDoc, listDataChildStaff);
How ever before this I am calling prepareListData();
private void prepareListData() {
listDataDoc = new ArrayList<>();
listDataChildStaff = new HashMap<>();
ArrayList<TeamObject> all = new ArrayList<>();
TeamObject adil = new TeamObject();
adil.setStaffName("Adil Patel");
adil.setStaffType(1);
listDataDoc.add(adil);
List<DoctorObject> adilGroup = new ArrayList<>();
DoctorObject cindy = new DoctorObject("Cindy G");
DoctorObject Bettina = new DoctorObject("Bettina");
adilGroup.add(cindy);
adilGroup.add(Bettina);
listDataChildStaff.put(listDataDoc.get(0),adilGroup);
My Adapter then looks like this:
public class ExpandableListAdapter extends BaseExpandableListAdapter {
private Context _context;
private List<TeamObject> _listDataHeader; // header titles
private HashMap<TeamObject, List<DoctorObject>> _listDataChild;
//Keep track of checks
//ArrayList<ArrayList<Integer>> check_states = new ArrayList<ArrayList<Integer>>();
public ExpandableListAdapter(Context context, List<TeamObject> listDataHeader, HashMap<TeamObject, List<DoctorObject>> listChildData) {
this._context = context;
this._listDataHeader = listDataHeader;
this._listDataChild = listChildData;
}
@Override
public Object getChild(int groupPosition, int childPosititon) {
return this._listDataChild.get(this._listDataHeader.get(groupPosition))
.get(childPosititon);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
final String childText = (String) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_item_create_team_child, null);
}
final CheckBox chk = (CheckBox) convertView.findViewById(R.id.checkBoxChild);
chk.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked == true){
//_listDataChild.get(childPosition)
}
}
}
);
//String test = String.valueOf(_listDataChild.containsKey("Adil"));
TextView txtListChild = (TextView) convertView
.findViewById(R.id.teamNameChild);
txtListChild.setText(childText);
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return this._listDataChild.get(this._listDataHeader.get(groupPosition))
.size();
}
@Override
public Object getGroup(int groupPosition) {
return this._listDataHeader.get(groupPosition);
}
@Override
public int getGroupCount() {
return this._listDataHeader.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_item_create_team, null);
}
TextView lblListHeader = (TextView) convertView
.findViewById(R.id.teamName);
lblListHeader.setTypeface(null, Typeface.BOLD);
lblListHeader.setText(_listDataHeader.get(groupPosition).getStaffName());
return convertView;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
Now when I run the app with that code I initially get this:
Great! However when I expand
I get the following error
FATAL EXCEPTION: main
Process: com.adilpatel.vitalengine, PID: 4493
java.lang.ClassCastException: com.adilpatel.vitalengine.expand.DoctorObject cannot be cast to java.lang.String
at com.adilpatel.vitalengine.Expand2.ExpandableListAdapter.getChildView(ExpandableListAdapter.java:54)
Line 54:
final String childText = (String) getChild(groupPosition, childPosition);
I know this is wrong, but im not sure how to get the names from my child objects.
Upvotes: 0
Views: 71
Reputation: 16587
You want to cast DoctorObject
to String and it's not possible. Instead of doing this create getString()
method in your DoctorObject
(which getString
return name or title of DoctroObject
) and do following:
DoctorObject model = (DoctorObject)getChild(groupPosition, childPosition);
String childText = model.getName();
Upvotes: 1