2012-02-28 46 views
1

我使用的是ExpandableListView,同樣的方式,他們在此示例代碼做: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList1.html如何確定誰觸發了onContextItemSelected?

的ExpandableListView獲取與類別和其子填充(一旦我點擊一個類別)。例如: -Dairy(類別) -Milk(子類) -cheese(子類)

當我在牛奶或奶酪長單擊,彈出一個菜單,使用該功能:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    ExpandableListContextMenuInfo info =(ExpandableListContextMenuInfo) menuInfo; 
    String selectedWord = ((TextView) info.targetView).getText().toString(); 
    menu.setHeaderTitle(selectedWord.split(",")[1]); //set header 
    String itemId = selectedWord.split(",")[0]; 
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
    nameValuePairs.add(new BasicNameValuePair("action", "getProducts")); 
    nameValuePairs.add(new BasicNameValuePair("subcat_id", itemId)); 
    String response = helper.makeHttpRequest(nameValuePairs); 
    String[] items = response.split(";"); 

    for (int i=0; i<items.length; i++){ 
     menu.add(0, 0, 0, items[i]); 
    } 
} 

然後,當我點擊彈出菜單中的一個項目時,我想知道列表中的哪個項目被選中(如果我點擊'牛奶'。例如,菜單中有「1%牛奶」, 「2%牛奶」等._ 此功能被解僱:

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo(); 
    String title = ((TextView) info.targetView).getText().toString(); 
    String selected=""; 
    int type = ExpandableListView.getPackedPositionType(info.packedPosition); 
    if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { 
     int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition); 
     int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition); 
     Toast.makeText(this, title + " selected: " + selected+ " " + childPos + " clicked in group " + groupPos , Toast.LENGTH_SHORT).show(); 
     return true; 
    } else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) { 
     int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition); 
     int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition); 
     Toast.makeText(this, title + " selected: " + selected + " " + childPos + " clicked in group " + groupPos , Toast.LENGTH_SHORT).show(); 
     return true; 
    } 

    return false; 
} 

但我沒有找到一種方法來確定哪個項目完全在列表中被點擊。

任何想法? 提前謝謝!如果我需要更清楚,請讓我知道。

回答

1

添加到ContextMenu的每個項目都應該有自己的唯一標識符。這對於何時需要確定選擇哪個菜單項很有用。因此添加菜單項需要如下所示:menu.add(0, unique_id, 0, items_name);。然後,當你要確定選擇哪個項目你使用產品ID做這樣的事情在onContextItemSelected

switch (item.getItemId()){ 
    case UNIQUE_ID_1: 
     //handle what to do 
    break; 
    case UNIQUE_ID_2: 
     //handle what to do 
    break; 
    .... 

所以,你可能需要稍微改變您的實現。我會爲每個可能的情況創建一個唯一的ID作爲int常量,並將每一個專門添加到菜單中。它可能會多一點代碼,但它會更容易處理。

還有一個建議,因爲你是新來的人:當有人提供了一個很好的答案時,你應該通過點擊答案旁邊的複選標記來接受它。祝你好運!

+0

這正是我需要的,非常感謝你! – mila 2012-02-28 03:21:53

相關問題