如何确定谁触发onContextItemSelected?

时间:2012-02-28 01:10:53

标签: java android expandablelistview

我正在使用ExpandableListView,与此示例代码中的方式相同: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList1.html

ExpandableListView会填充类别及其子类别(一旦我点击某个类别)。例: - 乳制品(类别)     -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 个答案:

答案 0 :(得分: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常量,并将每个id专门添加到菜单中。它可能会多一些代码,但它会更容易处理。

这也是一个建议,因为你是新来的:当有人提供一个好答案时,你应该通过点击答案旁边的复选标记来接受它。祝你好运!