2012-07-18 40 views
8

tôi có phương pháp onChildClick trên ứng dụng của tôi, mã của tôi nàyCách nhận một mục từ trẻ em trong 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; 
} 

} 

phương pháp onClick tôi

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; 

} 

tôi muốn có được chuỗi nếu tôi nhấp danh sách con

này logcat của tôi:

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] 

Tôi muốn nhận dữ liệu Chuỗi n ot "TwoLineListItem @ 405337c0", ai cũng có thể giúp tôi? nhờ

+0

Hiện mảnh ngắn và sai lầm của mã của bạn. – hasanghaforian

Trả lời

17

Sử dụng:

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

(nếu bạn muốn dữ liệu của một đứa trẻ, hoặc .getGroup(groupPosition) nếu bạn muốn dữ liệu khỏi nhóm) xem thay vì:

v.toString() 
+0

cảm ơn @Luksprog, nhưng kết quả là {NAME = Colombo}, tôi muốn nhận được chuỗi "Colombo", bạn có thể giúp tôi không? – idham

+0

Bạn đã lưu ngày của tôi. Tôi đưa nó vào một 'Con trỏ' và bây giờ tôi đang hạnh phúc (tôi đã sao lưu' Mở rộngListView' với một 'CursorAdapter') –

4

thử

này
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

nhờ vào @Sanket, rất hiệu quả :) – idham

2

Vì lý do nào đó các câu trả lời ở trên không hiệu quả đối với tôi nhưng tôi đã tìm thấy giải pháp ere dưới

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

Qua mã này bạn sẽ nhận được văn bản của đứa trẻ ExpandableListView nhấp

+0

Hoạt động tốt! cảm ơn! – Sharath

Các vấn đề liên quan