Adilp
Adilp

Reputation: 459

Expanded list view not showing child object

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:

enter image description here

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

Answers (1)

Amir
Amir

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

Related Questions