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
You have to use Adapter's getChild(groupPosition, childPosition) method to retrieve the instance of child.
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.
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.
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()
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;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With