Android 如何从ExpandableListView中的子级获取项目?

Android 如何从ExpandableListView中的子级获取项目?,android,expandablelistview,Android,Expandablelistview,我的应用程序中有onChildClick方法,这是我的代码 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, Strin

我的应用程序中有onChildClick方法,这是我的代码

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;
}

}
如果单击了列表子项,我想获取字符串

这是我的日志:

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
我想获取字符串数据而不是“TwoLineListItem@405337c0“,谁能帮我? 谢谢

使用:

parent.getExpandableListAdapter().getChild(groupPosition, childPosition);
(如果需要子级的数据,或
.getGroup(groupPosition)
如果需要组中的数据)视图,而不是:

v.toString()
试试这个

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;

 }

出于某种原因,上面的答案对我不起作用,但我在下面找到了一个解决方案

@Override
    public boolean onChildClick(ExpandableListView parent, View v,
            int groupPosition, int childPosition, long id) {
        // TODO Auto-generated method stub

        String message;
        TextView tx = (TextView) v; 
        message=tx.getText().toString();
        return false;
    }

通过这段代码,您将获得ExpandableListView子项单击后的文本

显示代码的简短和错误部分。谢谢@Luksprog,但结果是{NAME=Colombo},我想得到字符串“Colombo”,您能帮我吗?您救了我一天。我把它投射到一个
光标上,现在我很高兴(我用
光标或适配器支持
可扩展列表视图
@Override
    public boolean onChildClick(ExpandableListView parent, View v,
            int groupPosition, int childPosition, long id) {
        // TODO Auto-generated method stub

        String message;
        TextView tx = (TextView) v; 
        message=tx.getText().toString();
        return false;
    }