我正在使用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;
}
但我找不到确定单击列表中哪个项目的方法。
有什么想法吗? 先感谢您!如果我需要更清楚,请告诉我。
答案 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专门添加到菜单中。它可能会多一些代码,但它会更容易处理。
这也是一个建议,因为你是新来的:当有人提供一个好答案时,你应该通过点击答案旁边的复选标记来接受它。祝你好运!