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