Estoy tratando de agregar un elemento al menú de opciones desde un grupo de fragmentos.
He creado una nueva MenuFragment
clase y la extendí para los fragmentos en los que deseo incluir el elemento del menú. Aquí está el código:
Java:
public class MenuFragment extends Fragment {
MenuItem fav;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
fav = menu.add("add");
fav.setIcon(R.drawable.btn_star_big_off);
}
}
Kotlin:
class MenuFragment : Fragment {
lateinit var fav: MenuItem
override fun onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
fav = menu.add("add");
fav.setIcon(R.drawable.btn_star_big_off);
}
}
Por alguna razón, onCreateOptionsMenu
parece que no se ejecuta.
android
android-fragments
android-optionsmenu
misterbassman
fuente
fuente
Respuestas:
Llame al súper método:
Java:
Kotlin:
Ponga declaraciones de registro en el código para ver si no se está llamando al método o si el código no está modificando el menú.
También asegúrese de que está llamando
setHasOptionsMenu(boolean)
enonCreate(Bundle)
notificar el fragmento que debe participar en el manejo del menú Opciones.fuente
Tuve el mismo problema, pero creo que es mejor resumir e introducir el último paso para que funcione:
Agregue el método setHasOptionsMenu (verdadero) en el método de su Fragmento
onCreate(Bundle savedInstanceState)
.Anular
onCreateOptionsMenu(Menu menu, MenuInflater inflater)
(si desea hacer algo diferente en el menú de su Fragmento) yonOptionsItemSelected(MenuItem item)
métodos en su Fragmento.Dentro
onOptionsItemSelected(MenuItem item)
del método de su Actividad, asegúrese de devolver falso cuando la acción del elemento del menú se implementaría enonOptionsItemSelected(MenuItem item)
el método de Fragment.Un ejemplo:
Actividad
Fragmento
fuente
setHasOptionsMenu(true);
GraciasSi encuentra que el
onCreateOptionsMenu(Menu menu, MenuInflater inflater)
método no se invoca, asegúrese de llamar a lo siguiente desde elonCreate(Bundle savedInstanceState)
método Fragment :fuente
Toolbar
y tuvo que llamarsetHasOptionsMenu(true)
enonCreateView()
su lugaronCreate()
para hacerlo.Si necesita un
menu
para actualizar unwebview
dentro de un específicoFragment
, puede usar:Fragmento :
menu.xml
fuente
TL; DR
Use
android.support.v7.widget.Toolbar
y simplemente haga:Barra de herramientas independiente
La mayoría de las soluciones sugeridas como
setHasOptionsMenu(true)
solo funcionan cuando la Actividad principal tiene la Barra de herramientas en su diseño y la declara a través desetSupportActionBar()
. Entonces los Fragmentos pueden participar en la población del menú de este ActionBar exacto :Si desea una barra de herramientas independiente y un menú para un Fragmento específico , puede hacer lo siguiente:
menu_custom_fragment.xml
custom_fragment.xml
CustomFragment.kt
Sí, es así de fácil. Ni siquiera necesita anular
onCreate()
oonCreateOptionsMenu()
.PD: Esto solo funciona con
android.support.v4.app.Fragment
yandroid.support.v7.widget.Toolbar
(también asegúrese de usarAppCompatActivity
y unAppCompat
tema en sustyles.xml
).fuente
En el
menu.xml
debe agregar todos los elementos del menú. Luego, puede ocultar elementos que no desea ver en la carga inicial.menu.xml
Agregue
setHasOptionsMenu(true)
el método onCreate () para invocar los elementos del menú en su clase Fragment.FragmentClass.java
No necesita anular
onCreateOptionsMenu
nuevamente en su clase Fragment. Los elementos del menú se pueden cambiar (Agregar / quitar) anulando elonPrepareOptionsMenu
método disponible en Fragmento.fuente
Debe usar menu.clear () antes de inflar menús.
y
fuente
En mi caso, aquí están los pasos.
Paso 1
Paso 2
Paso 3
fuente
menu.clear()
menú anterior despejado. Trabajó para mí :)Si quieres agregar tu menú personalizado
fuente
He tenido el mismo problema, mis fragmentos eran páginas de un ViewPager. La razón por la que sucedía es que estaba usando el administrador de fragmentos hijo en lugar del administrador de fragmentos de soporte de actividad al crear instancias de FragmentPagerAdapter.
fuente
Archivo de menú:
Código de actividad:
Código de fragmento:
fuente
Tu código está bien. Solo faltaba el super en el método:
fuente
Me estaba volviendo loco porque ninguna de las respuestas aquí funcionó para mí.
Para mostrar el menú tuve que llamar:
setSupportActionBar(toolbar)
¡Hecho!
Nota: si su
toolbar
vista no está en el mismo diseño de actividad, no puede usar la llamada anterior directamente desde su clase de actividad, en este caso deberá obtener esa actividad de su clase de fragmento y luego llamar alsetSupportActionBar(toolbar)
. Recordando: su clase de actividad debería extender AppCompatActivity.Espero que esta respuesta te ayude.
fuente
Configurar el menú de opciones después de crear la vista de fragmentos funcionó bien para mí.
fuente
Mi problema fue un poco diferente. Hice todo bien. Pero estaba heredando la clase incorrecta para la actividad que aloja el fragmento.
Para que quede claro, si está anulando
onCreateOptionsMenu(Menu menu, MenuInflater inflater)
el fragmento, asegúrese de que su clase de actividad que aloja este fragmento heredaandroid.support.v7.app.ActionBarActivity
(en caso de que desee admitir un nivel de API inferior al 11).Estaba heredando
android.support.v4.app.FragmentActivity
para admitir el nivel de API por debajo de 11.fuente
Una cosa que agregaría a esto y la razón por la que no funcionaba para mí.
Es similar a la respuesta de Napster.
¡Asegúrate de que la actividad de alojamiento de tu fragmento se extienda
AppCompatActivity
, noFragmentActivity
!De la documentación de referencia de Google para FragmentActivity:
Para actualizar la respuesta de Napster,
ActionBarActivity
ahora en desuso, useAppCompatActivity
en su lugar.Cuando lo use
AppCompatActivity
, también asegúrese de establecer "el tema de la actividad enTheme.AppCompat
un tema similar" (Google Doc).Nota:
android.support.v7.app.AppCompatActivity
es una subclase de laandroid.support.v4.app.FragmentActivity
clase (consulte el documento de referencia AppCompatActivity ).fuente
En su carpeta de menú, haga un archivo .menu xml y agregue este xml
En su clase de fragmentos, anule este método y
Ahora solo configure su archivo xml de menú en clase de fragmento
fuente
Si todo lo anterior no funciona, debe depurar y asegurarse de que se haya llamado a la función onCreateOptionsMenu (colocando el registro de depuración o escritura ...)
Si no se ejecuta, tal vez su tema de Android no sea compatible con la barra de acción. Abra AndroidManifest.xml y establezca el valor
android:theme
con la barra de acción de soporte de temas :fuente
en su onCreate método add setHasOptionMenu ()
Luego anule su onCreateOptionsMenu
fuente