简体   繁体   中英

Android ExpandableListView with custom Child

I am trying to achieve something like the image below , i thought expandable list view can help me but it is not working . when expanding the parent , nothing shows up.

am i doing wrong using expandable list view ? , is there anything i should go with.? 图片

Please help..

EDIT : Adapter class code :

`public class ExpandableListAdapter extends android.widget.BaseExpandableListAdapter {

private Activity context;
private List<String> students;


public ExpandableListAdapter(Activity context, List<String> studentIds) {
     this.context = context;
     this.students = studentIds;
}

public Object getChild(int groupPosition, int childPosition) {
    return null;
}

public long getChildId(int groupPosition, int childPosition) {
    return childPosition;
}

public View getChildView(final int groupPosition, final int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
    final String laptop = (String) getChild(groupPosition, childPosition);
    LayoutInflater inflater = context.getLayoutInflater();

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.attendance_view, null);
    }

    CheckBox isPresent = (CheckBox) convertView.findViewById(R.id.is_present);
    EditText absentReason = (EditText) convertView.findViewById(R.id.absent_reason);

    return convertView;
}

public int getChildrenCount(int groupPosition) {
    return 1;
}

public Object getGroup(int groupPosition) {
    return laptops.get(groupPosition);
}

public int getGroupCount() {
    return students.size();
}

public long getGroupId(int groupPosition) {
    return groupPosition;
}

public View getGroupView(int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {
    String studentName= (String) getGroup(groupPosition);
    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.group_item,
                null);
    }
    TextView item = (TextView) convertView.findViewById(R.id.studentIds);
    item.setTypeface(null, Typeface.BOLD);
    item.setText(studentName);
    return convertView;
}

public boolean hasStableIds() {
    return true;
}

public boolean isChildSelectable(int groupPosition, int childPosition) {
    return true;
}

}`

First I want to tell you, in get childcount method there should return,how many child items of parent you want...

Like if you want two child items then get child count should return 2.

I will give yoy the exact workin code..

package com.example.n_level_list;
import java.util.ArrayList; 
import android.os.Bundle;
import android.animation.ArgbEvaluator;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.MeasureSpec;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.ExpandableListView;
import android.widget.TextView;

public class MainActivity extends Activity {
ExpandableListView mExpandableListView;
public static ArrayList<String> mArrayList,mArrayList2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mExpandableListView=(ExpandableListView)findViewById(R.id.expandableListView1); 
        mArrayList=new ArrayList<String>();
        mArrayList.add("first");
        mArrayList.add("second");
        mArrayList.add("third");
        mArrayList.add("fourth");
        mArrayList.add("fifth");
        Log.i("chk_size", "aa"+mArrayList.size());
          mArrayList2=new ArrayList<String>();

        ParentLevel mParentLevel=new ParentLevel(mArrayList);
        mExpandableListView.setAdapter(mParentLevel);
    }


    public class ParentLevel extends BaseExpandableListAdapter
    {
        ArrayList<String> mArrayList;
        public ParentLevel(ArrayList<String> mArrayList) 
        {
            this.mArrayList=mArrayList;
        }



        public ParentLevel() 
        {
            // TODO Auto-generated constructor stub
        }



        @Override
        public Object getChild(int groupPosition, int childPosition) 
        {
            // TODO Auto-generated method stub
            return childPosition;
        }

        @Override
        public long getChildId(int groupPosition, int childPosition) {
            // TODO Auto-generated method stub
            return childPosition;
        }

        @Override
        public View getChildView(int groupPosition, int childPosition,
                boolean isLastChild, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            CustExpListview SecondLevelexplv = new CustExpListview(MainActivity.this);
            mArrayList2.add("child_first");
            mArrayList2.add("child_second");
            SecondLevelAdapter mSecondLevelAdapter=new SecondLevelAdapter(mArrayList2);
            SecondLevelexplv.setAdapter(mSecondLevelAdapter);
            SecondLevelexplv.setGroupIndicator(null);
            return SecondLevelexplv;
        }

        @Override
        public int getChildrenCount(int groupPosition) {
            // TODO Auto-generated method stub
            return mArrayList2.size();
        }

        @Override
        public Object getGroup(int groupPosition) {
            // TODO Auto-generated method stub
            return groupPosition;
        }

        @Override
        public int getGroupCount() {
            // TODO Auto-generated method stub
            return mArrayList.size();
        }

        @Override
        public long getGroupId(int groupPosition) {
            // TODO Auto-generated method stub
            return groupPosition;
        }

        @Override
        public View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) 
        {
            LayoutInflater mInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView=mInflater.inflate(R.layout.inflate_activity, null);
            TextView mTextView=(TextView)convertView.findViewById(R.id.textView1); 
            mTextView.setText(mArrayList.get(groupPosition));
            return convertView;
        }

        @Override
        public boolean hasStableIds() {
            // TODO Auto-generated method stub
            return true;
        }

        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            // TODO Auto-generated method stub
            return true;
        }


    }





    public class CustExpListview extends ExpandableListView
    {

        int intGroupPosition, intChildPosition, intGroupid;

        public CustExpListview(Context context) {
               super(context);
        }

        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
               widthMeasureSpec = MeasureSpec.makeMeasureSpec(960,
                            MeasureSpec.AT_MOST);
               heightMeasureSpec = MeasureSpec.makeMeasureSpec(600,
                            MeasureSpec.AT_MOST);
               super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }

    }

    public class SecondLevelAdapter extends BaseExpandableListAdapter
    {
        ArrayList<String> mArrayList2;
        public SecondLevelAdapter(ArrayList<String> mArrayList2) 
        {
             this.mArrayList2=mArrayList2;
        }

        @Override
        public Object getChild(int groupPosition, int childPosition) {
            // TODO Auto-generated method stub
            return childPosition;
        }

        @Override
        public long getChildId(int groupPosition, int childPosition) 
        {
            // TODO Auto-generated method stub
            return childPosition;
        }

        @Override
        public View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) 
        {

            return null;
        }

        @Override
        public int getChildrenCount(int groupPosition) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public Object getGroup(int groupPosition) {
            // TODO Auto-generated method stub
            return groupPosition;
        }

        @Override
        public int getGroupCount() {
            // TODO Auto-generated method stub
            return mArrayList2.size();
        }

        @Override
        public long getGroupId(int groupPosition) {
            // TODO Auto-generated method stub
            return groupPosition;
        }

        @Override
        public View getGroupView(int groupPosition, boolean isExpanded,
                View convertView, ViewGroup parent) {
            LayoutInflater mInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView=mInflater.inflate(R.layout.inflate_activity, null);
            TextView mTextView=(TextView)convertView.findViewById(R.id.textView1); 
            mTextView.setText(mArrayList2.get(groupPosition));
            return convertView;
        }

        @Override
        public boolean hasStableIds() {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            // TODO Auto-generated method stub
            return false;
        }


    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM