2012-07-18 12 views
8

tengo método onChildClick en mi solicitud, ésta es mi código¿Cómo obtener un artículo de un niño en ExpandableListView?

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

} 

mi método 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; 

} 

quiero conseguir cadena si chasqué lista de elementos secundarios

Esta mi Logcat:

07-18 11:40:54.334: INFO/System.out(1014): Inside onChildClick at groupPosition = 0 Child clicked at position [email protected] 
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 [email protected] 

Quiero obtener datos de cadena n ot "TwoLineListItem @ 405337c0", ¿alguien puede ayudarme? gracias

+0

Mostrar pedazo corto y errónea de su código. – hasanghaforian

Respuesta

17

Uso:

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

(si desea que los datos de un niño, o .getGroup(groupPosition) si desea que los datos del grupo) vista en lugar de:

v.toString() 
+0

gracias @Luksprog, pero el resultado es {NAME = Colombo}, quiero obtener String "Colombo", ¿me pueden ayudar? – idham

+0

Usted me salvó el día. Lo eché a un 'Cursor' y ahora estoy contento (Respaldado el' ExpandableListView' con un 'CursorAdapter') –

4

probar esto

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; 

} 
+1

gracias a @Sanket, muy trabajo :) – idham

2

Por alguna razón, las respuestas anteriores no me funcionaron, pero encontré una solución h ere a continuación

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

A través de este código obtendrá el texto del niño ExpandableListView clic

+0

¡Funciona bien! ¡Gracias! – Sharath

Cuestiones relacionadas