ckpatel ckpatel - 2 months ago 32
Android Question

how to get child value of expandable listview in android?

I want to know how to get the child value of an expandable listview using setonItemclick listener method.
My code is given below but click event is not working properly.

mExpandableListView.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View v, int groupPosition,
long id) {
// TODO Auto-generated method stub
int itemType = ExpandableListView.getPackedPositionType(groupPosition);
Log.i("item type",""+itemType);
if ( itemType == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
childPosition = ExpandableListView.getPackedPositionChild(id);
groupPosition = ExpandableListView.getPackedPositionGroup(id);
Log.i("child",""+ childPosition);
Log.i("child Group",""+ groupPosition);
} else if(itemType == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
groupPosition = ExpandableListView.getPackedPositionGroup(id);
Log.i("Group",""+ groupPosition);
}
}
});

Answer

There is no need of trying to get positions manually. Use android defined methods.

This is the method for getting child position and parent position

public class MainActivity extends Activity {

    private ExpandableListView mExpandableListView;
    private List<GroupEntity> mGroupCollection;
     private int childPosition;
        private int groupPosition;
        boolean retVal;

        ExpandableListAdapter adapter;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mExpandableListView = (ExpandableListView) findViewById(R.id.expandableListView);
        prepareResource();
        initPage();


        /*mExpandableListView.setOnItemLongClickListener(new OnItemLongClickListener() {
            @Override
              public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                  int itemType = ExpandableListView.getPackedPositionType(id);

            if ( itemType == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
                      childPosition = ExpandableListView.getPackedPositionChild(id);
                      groupPosition = ExpandableListView.getPackedPositionGroup(id);
                      Log.i("child",""+ childPosition);
                      Log.i("child Group",""+ groupPosition);
                      //do your per-item callback here
                      return retVal; //true if we consumed the click, false if not
                  } else if(itemType == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
                      groupPosition = ExpandableListView.getPackedPositionGroup(id);
                      //do your per-group callback here
                      Log.i("Group",""+ groupPosition);
                      return retVal; //true if we consumed the click, false if not
                  } else {
                      // null item; we don't consume the click
                      return false;
                  }
            }
          });*/


    }


    private void prepareResource() {

        mGroupCollection = new ArrayList<GroupEntity>();

        for (int i = 1; i < 7; i++) {
            GroupEntity ge = new GroupEntity();
            if (i == 1)
                ge.Name = "Basic Info";
            if (i == 2)
                ge.Name = "Acadamic Background";
            if (i == 3)
                ge.Name = "Experience";
            if (i == 4)
                ge.Name = "Skill";
            if (i == 5)
                ge.Name = "Objective";
            if (i == 6)
                ge.Name = "Reference";
            for (int j = 1; j < 8; j++) {
                GroupItemEntity gi = ge.new GroupItemEntity();
                if (i == 1 && j == 1)
                    gi.Name = "FirstName";
                if (i == 1 && j == 2)
                    gi.Name = "MiddleName";
                if (i == 1 && j == 3)
                    gi.Name = "LastName";
                if (i == 1 && j == 4)
                    gi.Name = "Address";
                if (i == 1 && j == 5)
                    gi.Name = "Sex";
                if (i == 1 && j == 6)
                    gi.Name = "Merital stutas";
                if (i == 1 && j == 7)
                    gi.Name = "Date Of Birthday";
                ge.GroupItemCollection.add(gi);
            }
            mGroupCollection.add(ge);
        }

    }

    private void initPage() {
        mExpandableListView = (ExpandableListView) findViewById(R.id.expandableListView);
         adapter = new ExpandableListAdapter(this,
                mExpandableListView, mGroupCollection);
        mExpandableListView.setAdapter(adapter);
        registerForContextMenu(mExpandableListView);
    }

    public boolean onChildClick( ExpandableListView parent, View v, int groupPosition,int childPosition,long id) {
        System.out.println("Inside onChildClick at groupPosition = " + groupPosition +" Child clicked at position " + childPosition);

        return true;
    }

}