[英]menuitem.getmenuinfo() returns null for dynamically created views
[英]Why does item.getMenuInfo() returns null?
我一直在嘗試制作一個帶有菜單的簡單應用程序,該菜單可以更改調用菜單的項目的背景顏色。 但是 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;
}
}
提前致謝。
與回收器視圖等其他小部件相比,Android 菜單非常易於使用。 不需要為菜單使用適配器,因為它是默認處理的。 您需要做的就是在res/layout 中創建一個名為 menu 的 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>
對於所有菜單項,然后使用在片段/活動中啟動它
// Initiating Menu XML file (menu.xml)
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.layout.menu, menu);
return true;
}
然后做,
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.leon:
//Do your stuff for leon, zomara,etc
return true;
}
}
希望這有幫助😇
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.