9

我的应用程序上有 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;
}

}

我的 onClick 方法

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;

 }

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

这是我的日志:

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”的字符串数据,有人可以帮助我吗?谢谢

4

3 回答 3

18

利用:

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

(如果您想要孩子的数据,或者.getGroup(groupPosition)如果您想要来自组的数据)视图而不是:

v.toString()
于 2012-07-18T04:59:31.923 回答
4

尝试这个

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;

 }
于 2012-07-18T05:12:50.357 回答
2

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

@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 子项的文本

于 2014-08-10T15:09:15.180 回答