gpt4 book ai didi

android - 如何从 contextMenu 访问 ListItem 位置

转载 作者:行者123 更新时间:2023-11-29 17:56:09 24 4
gpt4 key购买 nike

我正在从事一个包含冰淇淋口味列表的项目。当您长按一种口味时,您会看到一个上下文菜单,其中包含一些选项:图片、成分、价格等。如果长按巧克力并选择图片,您应该会看到一张巧克力冰淇淋的图片...如果您对 Vanilla 做同样的操作,您会看到 Vanilla 冰淇淋。

问题来了。您在上下文菜单中所做的选择与您长按的原始 flavor 相关。我需要能够访问 flavor 数组中 flavor 的位置。 -- 在 OnListItemClicked() 方法中,我的口味数组的位置是可访问的,但是……OnContextItemSelect() 方法只知道它自己的选择项(图片、成分、价格)。

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

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

如果能得到帮助,我将不胜感激,谢谢:)

菜单演示.java

public class MenuDemo extends ListActivity {

TextView selection;
TextView displayText;
String[] flavorItems;
String[] colors;
ImageView myImage;
int currentMenu;
int listPosition = 0;

int[] ItemImageSource = {R.drawable.vanilla,R.drawable.chocolate,R.drawable.strawberry};

private final String TAG = "Main Activity";

@Override
public void onCreate(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(new ArrayAdapter<String>(this, R.layout.flavor_menu_style, flavorItems));
registerForContextMenu(getListView());
displayText.setText("Welcome! Click and hold flavor to learn more about it.");
}

public void onListItemClick(ListView parent, View v,int position, long id)
{

if (currentMenu == 1){selection.setText(colors[position]);}
else {selection.setText(flavorItems[position]);}

String strI = Integer.toString(position);
displayText.setText("teeesst" + strI);

listPosition = position;
Log.i(TAG,"!!!!!!!!!!!!!!");
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo)
{
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_menu_demo, menu);
}

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_new, menu);


return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) { //item is the menu item chosen

boolean ret = applyOptionMenuChoice(item);
if ( ret == false)
ret = super.onOptionsItemSelected(item);

return ret;

}


@Override
public boolean onContextItemSelected(MenuItem item)
{
boolean ret = applyMenuChoice(item);
if ( ret == false)
ret = super.onContextItemSelected(item);

return ret;
}


private boolean applyMenuChoice(MenuItem item) {
switch (item.getItemId())
{
case R.id.picture:

//this would work if listPosition was linked to the flavors array position
myImage.setImageResource(ItemImageSource[listPosition]);

return(true);

case R.id.ingredients:

String [] ingredients;
ingredients = new String [3];

ingredients[0] = "VANILLA -- these are the ingredients VANILLA";
ingredients[1] = "CHOCOLATE -- these are the ingredients";
ingredients[2] = "STRAWBERRY -- these are the ingredients";

displayText.setText(ingredients[listPosition]);

return(true);

case R.id.order:
//I will add stuff here later
return(true);

case R.id.price:
//I will add stuff here later
return(true);



}

return(false);

}

private boolean applyOptionMenuChoice(MenuItem item) {
switch (item.getItemId())
{
case R.id.color_menu:
setListAdapter(new ArrayAdapter<String>(this, R.layout.color_menu_style, colors));
currentMenu = 1;
return(true);

case R.id.flavor_menu:

setListAdapter(new ArrayAdapter<String>(this, R.layout.flavor_menu_style, flavorItems));
currentMenu = 2;
return(true);

}

return(false);

}


}

最佳答案

您可以通过MenuItem

获取您长按的列表项的位置
    @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 - 如何从 contextMenu 访问 ListItem 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19169831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com