scrolling collapsing collapsible collapsemode bar app android android-actionbar actionbarsherlock

android - collapsing - findViewById para MenuItem devuelve null



layout collapsemode parallax (3)

Este es mi archivo xml para el menú ActionBar.

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/fav_button" android:title="Favourite" android:icon="@drawable/unstar" android:showAsAction="always|withText" /> </menu>

En mi función onCreate , después de llamar a setContentView . Hago favButton = (MenuItem) this.findViewById(R.id.fav_button); Pero esto devuelve nulo.

Pero devuelve el objeto adecuado en la función onOptionsItemSelected .

Estoy usando ActionBarSherlock, si eso hace una diferencia.

He intentado varias opciones sugeridas por otros findViewById devuelve preguntas nulas, pero no han resuelto mi problema.


En lugar de

favButton = (MenuItem) this.findViewById(R.id.fav_button);

en onCreateOptionsMenu después de getMenuInflater (). inflate (R.menu.activity_main, menu);

favButton = menu.findItem(R.id.fav_button);


Use menu.findItem () para obtener el menú. Pero esto debe hacerse después de que se infla el menú.

Además, para responder a tu q en el comentario, puedes usar onPrepareOptionsMenu para establecer el estado de tu menú. Si este menú se actualiza una vez, también puede usar onCreateOptionsMenu, que se llama solo una vez.


pero si alguien realmente necesita View y no MenuItem (para diferentes manipulaciones, por ejemplo, para iniciar la animación), aún puede obtenerlo de la siguiente manera:

@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.your_menu_xml_file, menu); ... new Handler().post(new Runnable() { @Override public void run() { view = findViewById(R.id.menu_refresh_button); // view.startAnimation(animation); } }); return true; }