У меня много проблем с пониманием того, как работает контекстное меню Android.Я пишу простую программу, которая будет отображать список различных видов мороженого в виде списка.Когда пользователь «нажимает и удерживает на каждом типе», должно появиться контекстное меню с 4 опциями, спрашивающими, какую информацию они хотят отобразить об этом мороженом (изображение, ингредиенты, заказ, другое).не понимаю, как сделать так, чтобы контекстное меню каждого элемента списка давало соответствующую информацию (информацию, связанную с любым элементом списка, который пользователь коснулся и удерживал).
Я работаю на примере, приведенном моим учителем,который обладает некоторыми функциями, которые мне нужны, но не имеет отношения к отображению различной информации для каждого элемента списка. Я вижу, что в данном коде мой проф даже дал подсказку в комментариях в параметрах onCreateContextMenu ():
public void onCreateContextMenu( //called each time the context menu is requested
ContextMenu menu, //the ContextMenu itself
View v, //The view for which the context menu is being built
ContextMenu.ContextMenuInfo menuInfo) { //tells you which item in the list the user did the tap-and-hold over
Но я все еще не уверен в том, что я могу сделать с этим параметром, и я уже давно вращаю свои колеса. В стеке переполнения есть по крайней мере еще один поток, которыйотвечает на этот вопрос, но это не помогло мне приблизиться к пониманию того, что здесь происходит.
Я действительно ценю помощь, так как я новичок в Android (и в целом ООП) и немного не решаюсь задавать вопросы, опасаясь насмешек над публичной техникой или того, что меня рассматривают как преимущество сообщества.Я просто надеюсь, что в какой-то момент я смогу перевести его кому-нибудь еще.
Спасибо!
Вот мой код:
package CS285.Assignment2;
import android.app.Activity;
import android.os.Bundle;
import android.app.ListActivity;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class IceCreamMenu extends ListActivity {
TextView selection;
ImageView imgView;
String[] items={"Butter Pecan", "Chocolate",
"Coffee", "Mango",
"Rocky Road","Strawberry",
"Vanilla"};
int[] images={R.drawable.butterpecan,
R.drawable.choclate,
R.drawable.coffee,
R.drawable.mango,
R.drawable.rockyroad,
R.drawable.strawberry,
R.drawable.vanilla};
public static final int IMG_ID = 0;
public static final int INGR_ID = 1;
public static final int ORDER_ID = 2;
public static final int OTHER_ID = 3;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
selection=(TextView)findViewById(R.id.selection);
imgView = (ImageView)findViewById(R.id.Image);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
items));
registerForContextMenu(getListView()); //indicate that the ListView has a context menu.
}
//event handling for ListItemClick events
public void onListItemClick(ListView parent, View v,
int position, long id) {
selection.setText(items[position]);
}
@Override
public void onCreateContextMenu( //called each time the context menu is requested
ContextMenu menu, //the ContextMenu itself
View v, //The view for which the context menu is being built
ContextMenu.ContextMenuInfo menuInfo) { //tells you which item in the list the user did the tap-and-hold over
populateMenu(menu);
}
private void populateMenu(Menu menu) {
menu.add(Menu.NONE, IMG_ID, Menu.NONE, "Picture");
menu.add(Menu.NONE, INGR_ID, Menu.NONE, "Ingredients");
menu.add(Menu.NONE, ORDER_ID, Menu.NONE, "Order");
menu.add(Menu.NONE, OTHER_ID, Menu.NONE, "Other");
}
private boolean applyMenuChoice(MenuItem item) {
switch (item.getItemId()) {
case IMG_ID:
imgView.setImageResource(images[0]);
return(true);
case INGR_ID:
return(true);
case ORDER_ID:
return(true);
case OTHER_ID:
return(true);
}
return(false);
}
//called whenever an item in a ContextMenu is selected.
@Override
public boolean onContextItemSelected(MenuItem item) { //item is the menu item chosen
return(applyMenuChoice(item) ||
super.onContextItemSelected(item));
}
}