TransWikia.com

obtener actionViewClass de menuitem android studio

Stack Overflow en español Asked on December 18, 2021

Estoy tratando de hacer un menuitem personalizado pero al intentar obtener una propiedad de la clase personalizada me da java.lang.NullPointerException

este es mi codigo:

activity_main.xml

<android.support.design.widget.NavigationView
     android:id="@+id/nav_view"
     android:layout_width="wrap_content"
     android:layout_height="match_parent"
     android:layout_gravity="start"
     android:fitsSystemWindows="true"
     app:headerLayout="@layout/nav_header_main"
     app:menu="@menu/main.xml" />

main.xml

<menu>
    
      <item
           android:id="@+id/nav_newversion"
           tools:ignore="MenuTitle"
           app:actionViewClass="com.package.meteorocorte.customitem" />
</menu>

customitem.java

public class customitem extends LinearLayout {
    TextView text=new TextView(getContext());

    public customitem(Context context) {
        super(context);
        setOrientation(VERTICAL);
        setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        setBackgroundColor(Color.GREEN);
        setPadding(0,12,0,12);
        text.setText(("hola"));
        text.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        text.setTextColor(Color.BLACK);
        addView(text);
    }

    public TextView getText() {
        return text;
    }
}

MainActivity.java

MenuItem item=((NavigationView)findViewById(R.id.nav_view)).getMenu().getItem(0);
item.setVisible(true);
TextView text= ((customitem) item.getActionView()).getText();//aqui me da java.lang.NullPointerException

y si se preguntaronn si servia la personalización les dejo la imagen:

introducir la descripción de la imagen aquí

One Answer

Es correcto la mayoría de lo que realizas, obtienes el elemento del NavigationView, esto debería funcionar sin problema:

MenuItem item=((NavigationView)findViewById(R.id.nav_view)).getMenu().getItem(0);
TextView text= ((customitem) item.getActionView()).getText();

Pero es super importante que en el archivo del menu main.xml el elemento sea en verdad el primero (indice 0)

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    
    <item
        android:id="@+id/nav_newversion"
        tools:ignore="MenuTitle"
        app:actionViewClass="com.package.meteorocorte.customitem" />


</menu>

y la clase customitem en verdad se encuentre en el paquete: "com.package.meteorocorte", asegura estas dos cosas y te aseguro realizaras sin problema lo que deseas.

Answered by Elenasys on December 18, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP