Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get an item from child in ExpandableListView?

I have onChildClick method on my application, this my code

public class listview extends ExpandableListActivity {

 private static final String NAME = "NAME";
 private static final String IS_EVEN = "IS_EVEN";
 private ExpandableListAdapter mAdapter;
 List<Map<String, String>> groupData = new ArrayList<Map<String, String>>();
 List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>();
 InputStream is;
 boolean addState = true;
 boolean addCountry;
 HashMap<String, String> countryMap = new HashMap<String, String>();
 HashMap<String, String> stateMap = new HashMap<String, String>();
 int count = 0;
 int count1 = -1;
 int count2 = 0;
 List<String> stateCount = new ArrayList<String>();

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // Reading data from text file to inout stream
  is = this.getResources().openRawResource(R.raw.countrystate);
  BufferedReader reader = new BufferedReader(new InputStreamReader(is));
  try {
   String line = "";
   while ((line = reader.readLine()) != null) {
    String[] strings = line.split("-");
    String ctry = strings[0].trim();
    String st = strings[1].trim();
    /*
     * loading country and state to two separate hash tables
     */
    if (countryMap.containsValue(ctry)) {
     addCountry = false;
     if (!addState) {
      stateMap.put("state" + count1 + count2, st);
      count2++;
     }
    } else {
     addCountry = !addCountry;
     count1++;
     //adding no. of states for a country to a list
     stateCount.add("" + count2);
     if (addCountry) {
      count2 = 0;
      countryMap.put("country" + count, ctry);
      stateMap.put("state" + count1 + count2, st);
      addState = false;
     }
     count2++;
     count++;
    }
   }
  } catch (Exception e) {
  }
  //re-arranging the state count list
  stateCount.add("" + count2);
  stateCount.remove(0);
  for (int i = 0; i < countryMap.size(); i++) {
   Map<String, String> curGroupMap = new HashMap<String, String>();
   groupData.add(curGroupMap);
   String ctry = countryMap.get("country" + i);
   curGroupMap.put(NAME, ctry);
   curGroupMap.put(IS_EVEN, "Country " + i);
   List<Map<String, String>> children = new ArrayList<Map<String, String>>();
   int k = Integer.parseInt(stateCount.get(i));
   for (int j = 0; j < k; j++) {
    Map<String, String> curChildMap = new HashMap<String, String>();
    children.add(curChildMap);
    curChildMap.put(NAME, stateMap.get("state" + i + j));
   // curChildMap.put(IS_EVEN, "State " + j);
   }
   childData.add(children);
  }



  // Set up our adapter
  mAdapter = new SimpleExpandableListAdapter(this, groupData,
    android.R.layout.simple_expandable_list_item_1, new String[] {
      NAME, IS_EVEN }, new int[] { android.R.id.text1,
      android.R.id.text2 }, childData,
    android.R.layout.simple_expandable_list_item_2, new String[] {
      NAME, IS_EVEN }, new int[] { android.R.id.text1,
      android.R.id.text2 });
  setListAdapter(mAdapter);


    }
  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+v.toString());

        return true;

 }

  public List<List<Map<String, String>>> getChildData() {
    return childData;
}

}

my onClick method

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+v.toString());

        return true;

 }

i want to get String if i clicked list child

This my logcat:

07-18 11:40:54.334: INFO/System.out(1014): Inside onChildClick at groupPosition = 0 Child clicked at position 0android.widget.TwoLineListItem@405337c0
07-18 11:40:56.714: DEBUG/dalvikvm(916): GC_EXPLICIT freed 14K, 53% free 2557K/5379K, external 884K/1038K, paused 111ms
07-18 11:40:58.744: INFO/System.out(1014): Inside onChildClick at groupPosition = 0 Child clicked at position 0android.widget.TwoLineListItem@405337c0

I want to get String data not "TwoLineListItem@405337c0", anyone can help me? thanks

like image 637
idham Avatar asked Jul 18 '12 04:07

idham


People also ask

How do you get a child position in ExpandableListView?

You have to use Adapter's getChild(groupPosition, childPosition) method to retrieve the instance of child.

What is an Expandable List view?

Android ExpandableListView is a view that shows items in a vertically scrolling two-level list. It differs from a ListView by allowing two levels which are groups that can be easily expanded and collapsed by touching to view and their respective children items.

What is ExpandableListView in Android?

android.widget.ExpandableListView. A view that shows items in a vertically scrolling two-level list. This differs from the ListView by allowing two levels: groups which can individually be expanded to show its children. The items come from the ExpandableListAdapter associated with this view.


2 Answers

Use:

parent.getExpandableListAdapter().getChild(groupPosition, childPosition);

(if you want the data of a child, or .getGroup(groupPosition) if you want the data from the group) view instead of:

v.toString()
like image 151
user Avatar answered Oct 20 '22 17:10

user


try this

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 " +  childData.get(groupposition).get(childPosition).get("NAME"));

        return true;

 }
like image 31
Sanket Kachhela Avatar answered Oct 20 '22 17:10

Sanket Kachhela