2012-07-18 9 views
8

私は自分のアプリケーション、この私のコードにonChildClick方法を持っている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; 
} 

} 

私の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; 

} 

私はリストの子

この私の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] 

文字列データを取得したいot "TwoLineListItem @ 405337c0"、誰でも私を助けることができますか? おかげ

+0

ショー短く、誤った部分をクリックします。 – hasanghaforian

答えて

17

用途:

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

(あなたがグループからのデータが必要な場合は、子のデータ、または.getGroup(groupPosition)をしたい場合)ビューの代わり:

v.toString() 
+0

@ Luksprogに感謝しますが、結果は{NAME = Colombo}です。私はString "Colombo"を手に入れたいですか? – idham

+0

あなたは私の一日を救った。私はそれを 'Cursor'にキャストしました。そして、私は満足しています(' CursorAdapter'で 'ExpandableListView'を後押ししました)。 –

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; 

} 
+1

@Sanketに大きな感謝の意を表します:) – idham

2

何らかの理由で上記の回答が私のために機能しませんでしたが、私は解決策hを見つけましたあなたはExpandableListViewの子のテキストを取得します。このコードを

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

以下のEREは、あなたのコードの

+0

うまく動作します!ありがとう! – Sharath

関連する問題