Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么item.getMenuInfo()返回null?_Java_Android_Nullpointerexception_Null_Return - Fatal编程技术网

Java 为什么item.getMenuInfo()返回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

我一直在尝试制作一个简单的应用程序,其中包含一个菜单,可以更改调用菜单项的背景颜色。但是item.getMenuInfo返回null,我不知道为什么

互联网上的一些解决方案说,这是因为你应该传递整个列表,而不是项目。然而,我正在传递整个ListView,但我一直得到一个java.lang.NullPointerException,因为item.getMenuItem()返回null

这是我注册的地方:

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