Android 如何使我的关联菜单根据单击的项目显示不同的图像

Android 如何使我的关联菜单根据单击的项目显示不同的图像,android,imageview,contextmenu,Android,Imageview,Contextmenu,我是android编程新手,我正在制作一个使用上下文菜单的简单应用程序。主屏幕显示了一个可供选择的口味菜单,当您长时间单击一个项目时,您会看到上下文菜单,其中有一个您可以执行的操作列表:图片、配料、订单、价格。- 问题是:无论单击哪个项目,设置上下文菜单显示相同的图片或显示相同的成分都非常容易,但我希望我的应用程序在长时间单击巧克力并选择图片时显示巧克力图像,然后在长时间单击香草并选择图片时显示香草图像。我想不出该怎么做才能允许setImage根据选择的项目采用可互换的图像路径。如果有任何建议或

我是android编程新手,我正在制作一个使用上下文菜单的简单应用程序。主屏幕显示了一个可供选择的口味菜单,当您长时间单击一个项目时,您会看到上下文菜单,其中有一个您可以执行的操作列表:图片、配料、订单、价格。-

问题是:无论单击哪个项目,设置上下文菜单显示相同的图片或显示相同的成分都非常容易,但我希望我的应用程序在长时间单击巧克力并选择图片时显示巧克力图像,然后在长时间单击香草并选择图片时显示香草图像。我想不出该怎么做才能允许setImage根据选择的项目采用可互换的图像路径。如果有任何建议或解决方案,我将非常感激

转到applyMenuChoice()中的switch语句,查看我被卡住的地方

Java
public类MenuDemo扩展了ListActivity{
文本视图选择;
文本视图显示文本;
字符串项;
字符串[]颜色;
图像查看我的图像;
int当前菜单;
私有最终字符串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]);}
listPosition=位置;
}
@凌驾
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.图片:
//myImage.setImageResource(ItemImageSource[0]);
//setImageDrawable(getResources().getDrawable(R.drawable.+listPosition));
返回(真);
案例R.id.成分:
//我们会在这里采取行动
返回(真);
案例R.id.订单:
getListView().setDividerHeight(8);
//命令行动将在这里进行
案例R.id.价格:
//价格行动将在这里进行
返回(真);
}
返回(假);
}
私有布尔applyOptionMenuChoice(菜单项){
开关(item.getItemId())
{
案例R.id.color\u菜单:
Log.i(标记“!!!!!!!!!”);
setListAdapter(新的ArrayAdapter(此,R.layout.color_菜单_样式,颜色));
currentMenu=1;
返回(真);
案例R.id.flavor\u菜单:
Log.i(标记“!!!!!!!!!”);
setListAdapter(新的ArrayAdapter(这个,R.layout.flavor_菜单风格,flavorItems));
currentMenu=2;
返回(真);
}
返回(假);
}
}
Main.xml


您可以根据与用户选择相关联的变量(或共享引用)的值(例如,布尔选择、巧克力、香草……)更改菜单的图片:


我尝试过类似的方法,但仍然有困难,但是谢谢你的帮助。
public class MenuDemo extends ListActivity {
    TextView selection;
    TextView displayText;
    String[] flavorItems;
    String[] colors;
    ImageView myImage;
    int currentMenu;

    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]);}

        listPosition = position;
    }

    @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:
        //myImage.setImageResource(ItemImageSource[0]);
            //setImageDrawable(getResources().getDrawable(R.drawable.+listPosition ));
            return(true);

        case R.id.ingredients:
            //ingredients action will go here
            return(true);

        case R.id.order:
            getListView().setDividerHeight(8);
            //order action will go here

        case R.id.price:
            //price action will go here
            return(true);

        }

        return(false);

    }

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

        case R.id.flavor_menu:

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

        }

        return(false);

    }


}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        android:background="@color/backgroundColor"

        >

        <TextView
                android:id="@+id/selection"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:background="#ffffffff"
                android:minHeight="40dp"
                android:paddingLeft="6dip"
                android:gravity="center_vertical"
                android:textStyle="bold"
        />

        <ListView
            android:id="@android:id/list"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:drawSelectorOnTop="false" />

        <ImageView
            android:id="@+id/myImage"
            android:layout_width="242dp"
            android:layout_height="188dp"
            android:adjustViewBounds="true"
            android:src="@drawable/icecream_1"
            android:layout_gravity="center"
         />

         <TextView
                android:id="@+id/displayText"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:background="#ffffffff"
                android:padding="20dp" 
                android:fontFamily="sans-serif-light"
                android:textStyle="normal|bold|italic"
                android:drawableLeft="@drawable/ice2"
        />


</LinearLayout>
/*this integer will capture what flavor the user clicked on*/
int listPosition=-1;//global scope, assign a default value

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

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

    listPosition = position;
}



private boolean applyMenuChoice(MenuItem item) {
 switch (item.getItemId()) 
 {
  case R.id.picture:
   if(listPosition!=-1){
    myImage.setImageResource(ItemImageSource[listPosition]);
   }
   else{
    myImage.setImageResource(error_drawable_image);
   }
        //setImageDrawable(getResources().getDrawable(R.drawable.+listPosition ));
        return(true);
 }
}