我使用的是 ExpandableListView,他们在此示例代码中的使用方式相同: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList1.html
ExpandableListView 会填充类别及其子类别(单击类别后)。例子: -乳制品(类) -牛奶(子类别) -奶酪(子类)
当我长按牛奶或奶酪时,使用此功能会弹出一个菜单:
@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;
}
但我没有找到一种方法来确定单击了列表中的确切项目。
有什么想法吗? 先感谢您!如果我需要更清楚,请告诉我。
最佳答案
您添加到 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
常量,并将每个具体添加到菜单中。代码可能会多一些,但处理起来会容易得多。
这只是一个建议,因为您是新来的:当有人提供了一个好的答案时,您应该通过单击答案旁边的复选标记来接受它。祝你好运!
关于java - 我如何确定谁触发了 onContextItemSelected?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9474945/