Android 如何从contextMenu访问ListItem位置

Android 如何从contextMenu访问ListItem位置,android,contextmenu,listactivity,Android,Contextmenu,Listactivity,我正在做一个有冰淇淋口味清单的项目。当你长时间点击一种口味时,你会看到一个上下文菜单,其中有一些选项:图片、配料、价格等。如果长时间单击巧克力并选择图片,您应该会看到巧克力冰淇淋的图片…如果您对香草冰淇淋也这样做,您会看到香草冰淇淋 问题出在这里。您在关联菜单中所做的选择与您长时间单击的原始味道相关。我需要能够访问香精数组中香精的位置。-在OnListItemClicked()方法中,可以访问my flavors数组的位置,但是…OnContextItemSelect()方法只知道它自己的选择项

我正在做一个有冰淇淋口味清单的项目。当你长时间点击一种口味时,你会看到一个上下文菜单,其中有一些选项:图片、配料、价格等。如果长时间单击巧克力并选择图片,您应该会看到巧克力冰淇淋的图片…如果您对香草冰淇淋也这样做,您会看到香草冰淇淋

问题出在这里。您在关联菜单中所做的选择与您长时间单击的原始味道相关。我需要能够访问香精数组中香精的位置。-在OnListItemClicked()方法中,可以访问my flavors数组的位置,但是…OnContextItemSelect()方法只知道它自己的选择项(图片、配料、价格)

您可以看到,我创建了一个listPosition变量,但我已经意识到,只有使用OnListItemClicked()快速单击一个味道,而不是使用OnContextItemSelect()长时间单击,这才有效

ApplyMenuChoice()是可以找到问题代码的地方

我非常感谢你的帮助, 谢谢:)

MenuDemo.java
public类MenuDemo扩展了ListActivity{
文本视图选择;
文本视图显示文本;
字符串项;
字符串[]颜色;
图像查看我的图像;
int当前菜单;
int listPosition=0;
int[]ItemImageSource={R.drawable.香草,R.drawable.chocolate,R.drawable.草莓};
私有最终字符串TAG=“主活动”;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
selection=(TextView)findViewById(R.id.selection);
displayText=(TextView)findViewById(R.id.displayText);
myImage=(ImageView)findViewById(R.id.myImage);
flavorItems=getResources().getStringArray(R.array.flavors);
colors=getResources().getStringArray(R.array.colors);
setListAdapter(新的ArrayAdapter(这个,R.layout.flavor_菜单风格,flavorItems));
registerForContextMenu(getListView());
setText(“欢迎!点击并按住flavor以了解更多信息。”);
}
public void onListItemClick(ListView父视图、视图v、整数位置、长id)
{   
如果(currentMenu==1){selection.setText(colors[position]);}
else{selection.setText(flavorItems[position]);}
字符串strI=Integer.toString(位置);
displayText.setText(“teeesst”+strI);
listPosition=位置;
Log.i(标记“!!!!!!!!!”);
}
@凌驾
public void onCreateContextMenu(ContextMenu菜单,视图v,ContextMenu.ContextMenuInfo菜单信息)
{
super.onCreateContextMenu(menu,v,menuInfo);
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单。活动菜单\u演示,菜单);
}
@凌驾
公共布尔onCreateOptions菜单(菜单)
{       
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单。活动\新菜单);
返回true;
}
@凌驾
公共布尔值OnOptions ItemSelected(MenuItem项){//item是所选的菜单项
布尔ret=applyOptionMenuChoice(项目);
如果(ret==false)
ret=super.onOptionsItemSelected(项目);
返回ret;
}
@凌驾
公共布尔值onContextItemSelected(MenuItem项)
{
布尔ret=applyMenuChoice(项目);
如果(ret==false)
ret=super.onContextItemSelected(项目);
返回ret;
}
私有布尔applyMenuChoice(菜单项){
开关(item.getItemId())
{
案例R.id.图片:
//如果listPosition链接到flavors数组位置,这将起作用
setImageResource(ItemImageSource[listPosition]);
返回(真);
案例R.id.成分:
字符串[]成分;
成分=新字符串[3];
配料[0]=“香草——这些是香草的配料”;
配料[1]=“巧克力——这些就是配料”;
配料[2]=“草莓——这些就是配料”;
displayText.setText(配料[listPosition]);
返回(真);
案例R.id.订单:
//稍后我会在这里添加内容
返回(真);
案例R.id.价格:
//稍后我会在这里添加内容
返回(真);
}
返回(假);
}
私有布尔applyOptionMenuChoice(菜单项){
开关(item.getItemId())
{
案例R.id.color\u菜单:
setListAdapter(新的ArrayAdapter(此,R.layout.color_菜单_样式,颜色));
currentMenu=1;
返回(真);
案例R.id.flavor\u菜单:
setListAdapter(新的ArrayAdapter(这个,R.layout.flavor_菜单风格,flavorItems));
currentMenu=2;
返回(真);
}
返回(假);
}
}

您可以通过
菜单项

    @Override
    public boolean onContextItemSelected(MenuItem item) {
         AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
         int listPosition = info.position;
         //pass this to your applyMenuChoice method. ice cream nom nom nom
    }

厉害!这只做了一个小小的修改。我真的很感谢你的帮助,我知道android编程,这在我自己身上是很难发现的。为了防止其他人看到此示例,唯一的更改是我们正在查看的方法是onContextItemSelected(MenuItem项),而不是OnOptions ItemSelected(MenuItem项)。@ThisBetterWork-哇哦。修正了:)
    @Override
    public boolean onContextItemSelected(MenuItem item) {
         AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
         int listPosition = info.position;
         //pass this to your applyMenuChoice method. ice cream nom nom nom
    }