Java 为什么item.getMenuInfo()返回null?
我一直在尝试制作一个简单的应用程序,其中包含一个菜单,可以更改调用菜单项的背景颜色。但是item.getMenuInfo返回null,我不知道为什么 互联网上的一些解决方案说,这是因为你应该传递整个列表,而不是项目。然而,我正在传递整个ListView,但我一直得到一个java.lang.NullPointerException,因为item.getMenuItem()返回null 这是我注册的地方:Java 为什么item.getMenuInfo()返回null?,java,android,nullpointerexception,null,return,Java,Android,Nullpointerexception,Null,Return,我一直在尝试制作一个简单的应用程序,其中包含一个菜单,可以更改调用菜单项的背景颜色。但是item.getMenuInfo返回null,我不知道为什么 互联网上的一些解决方案说,这是因为你应该传递整个列表,而不是项目。然而,我正在传递整个ListView,但我一直得到一个java.lang.NullPointerException,因为item.getMenuItem()返回null 这是我注册的地方: AdaptadorPersonalizado adaptador = new Adaptado
AdaptadorPersonalizado adaptador = new AdaptadorPersonalizado(this, R.layout.layoutlinealistview, elementos);
ListView lista = (ListView) findViewById(R.id.provincias);
lista.setAdapter(adaptador);
lista.setOnItemClickListener(this);
registerForContextMenu(lista);
在这个方法中,我使用item.getMenuInfo()函数:
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
switch(item.getItemId()) {
case R.id.rojo:
return true;
default:
return true;
}
}
这是我创建自定义ArrayAdapter并为其分配内容的类:
String[] elementos = {"León",
"Zamora",
"Salamanca",
"Palencia",
"Valladolid",
"Ávila",
"Burgos",
"Segovia",
"Soria"};
String[] descripciones = {"Provincia de Leon",
"Provincia de Zamora",
"Provincia de Salamanca",
"Provincia de Palencia",
"Provincia de Valladolid",
"Provincia de Ávila",
"Provincia de Burgos",
"Provincia de Segovia",
"Provincia de Soria"
};
int[] imagenes = {R.drawable.leon,
R.drawable.zamora,
R.drawable.salamanca,
R.drawable.palencia,
R.drawable.valladolid,
R.drawable.avila,
R.drawable.burgos,
R.drawable.segovia,
R.drawable.soria
};
class AdaptadorPersonalizado extends ArrayAdapter<String> {
public AdaptadorPersonalizado(Context ctx, int txtViewResourceId, String[] objects) {
super(ctx, txtViewResourceId, objects);
}
@Override
public View getDropDownView(int position, View cnvtView, ViewGroup prnt) {
return crearFilePersonalizada(position, cnvtView, prnt);
}
public View getView(int pos, View cnvtView, ViewGroup prnt) {
return crearFilePersonalizada(pos, cnvtView, prnt);
}
private View crearFilePersonalizada(int posicion, View convertView, ViewGroup parent) {
LayoutInflater inflador = getLayoutInflater();
View miFila = inflador.inflate(R.layout.layoutlinealistview, parent, false);
TextView nombre = miFila.findViewById(R.id.textViewNombre);
nombre.setText(elementos[posicion]);
TextView descripcion = miFila.findViewById(R.id.textViewDescripcion);
descripcion.setText(descripciones[posicion]);
ImageView imagen = miFila.findViewById(R.id.imageViewImagenesCiudades);
imagen.setImageResource(imagenes[posicion]);
return miFila;
}
}
String[]elementos={“leon”,
“萨莫拉”,
“萨拉曼卡”,
“帕伦西亚”,
“瓦拉多利德”,
“Ávila”,
“布尔戈斯”,
“塞戈维亚”,
“索里亚”};
字符串[]descripciones={“Provincia de Leon”,
“萨莫拉省”,
“萨拉曼卡省”,
“帕伦西亚省”,
“瓦拉多利德省”,
“德维拉省”,
“布尔戈斯省”,
“塞戈维亚省”,
“索里亚省”
};
int[]imagenes={R.drawable.leon,
R.drawable.zamora,
R.drawable.萨拉曼卡,
R.drawable.palencia,
R.drawable.valladolid,
R.drawable.avila,
R.drawable.burgos,
R.drawable.segovia,
R.drawable.soria
};
类AdapterDo扩展ArrayAdapter{
公共适配器(上下文ctx、int-txtViewResourceId、字符串[]对象){
超级(ctx、txtViewResourceId、对象);
}
@凌驾
公共视图getDropDownView(内部位置、视图cnvtView、视图组prnt){
返回CREARDA(位置、cnvtView、prnt);
}
公共视图getView(内部位置、视图cnvtView、视图组prnt){
退货凭证(pos、cnvtView、prnt);
}
私有视图crearFilePersonalizada(int位置、视图转换视图、视图组父级){
LayoutInflater Inflator=getLayoutInflater();
视图miFila=inflador.inflate(R.layout.layoutlinealistview,父级,false);
TextView nombre=miFila.findviewbyd(R.id.textViewNombre);
命名为setText(elementos[posicion]);
TextView descripion=miFila.findViewById(R.id.textViewDescription);
descripion.setText(descripciones[posicion]);
ImageView imagen=miFila.findViewById(R.id.imageViewImagenesCiudades);
imagen.setImageResource(imagenes[posicion]);
返回米菲拉;
}
}
提前感谢。与其他小部件(如回收器视图)相比,Android菜单非常易于使用。 不需要为菜单使用适配器,因为默认情况下会对其进行处理。 你需要做的就是, 创建一个名为menu insideres/layout的XML文件
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Single menu item
Set id, icon and Title for each menu item -->
<item android:id="@+id/menu_leon"
android:icon="@drawable/icon_leon"
android:title="Leon" />
<item android:id="@+id/menu_zamora"
android:icon="@drawable/icon_zamora"
android:title="zamora" />
</menu>
然后呢,
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.leon:
//Do your stuff for leon, zomara,etc
return true;
}
}
希望这能帮助Thx找到答案。我想做的是创建一个与ListView关联的上下文菜单。我遇到的问题是,使用自定义适配器时,方法项.getMenuInfo()返回null。所以我无法知道用户从哪个元素调用菜单。我被卡住了。我不知道如何修理它。我只想对调用菜单的项执行一些操作。我不知道我是否在解释我自己。谢谢你的帮助
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.leon:
//Do your stuff for leon, zomara,etc
return true;
}
}