Estoy empezando un nuevo proyecto que utiliza el AppCompat/ActionBarCompatde v7biblioteca de soporte. Estoy tratando de averiguar cómo usar el getSupportActionBardesde dentro de un fragmento. Mi actividad que aloja el fragmento se extiende ActionBarActivity, pero no veo una clase de soporte similar para Fragmentos.
Desde dentro de mi fragmento
public class CrimeFragment extends Fragment {
//...
getActivity().getSupportActionBar().setSubtitle(R.string.subtitle); // getSupportActionBar is not defined in the v4 version of Fragment
//...
}
La página de Google para usarlo ( http://android-developers.blogspot.in/2013/08/actionbarcompat-and-io-2013-app-source.html ) dice que no debería haber cambios para el v4fragmento. ¿Necesito enviar todas mis getActivity()llamadas a un ActionBarActivity? Eso parece un mal diseño.

Si bien esta pregunta ya tiene una respuesta aceptada, debo señalar que no es del todo correcta: llamar
getSupportActionBar()desdeFragment.onAttach()causará unNullPointerExceptioncuando se rota la actividad.Respuesta corta:
Úselo
((ActionBarActivity)getActivity()).getSupportActionBar()enonActivityCreated()(o en cualquier punto posterior de su ciclo de vida) en lugar deonAttach().Respuesta larga:
La razón es que si
ActionBarActivityse recrea después de una rotación, restaurará todos los Fragmentos antes de crear realmente elActionBarobjeto.Código fuente para
ActionBarActivityen lasupport-v7biblioteca:ActionBarActivityDelegate.createDelegate()crea elmImplobjeto según la versión de Android.super.onCreate()esFragmentActivity.onCreate(), que restaura los fragmentos anteriores después de una rotación (FragmentManagerImpl.dispatchCreate(), & c).mImpl.onCreate(savedInstanceState)esActionBarActivityDelegate.onCreate(), que lee lamHasActionBarvariable del estilo de la ventana.mHasActionBares verdad,getSupportActionBar()siempre volveránull.Fuente de
ActionBarActivityDelegate.getSupportActionBar():fuente
ActionBarActivityes obsoleto. Úselo en suAppCompatActivitylugarSi alguien usa com.android.support:appcompat-v7: y AppCompatActivity como actividad, esto funcionará
fuente
en su
fragment.xmlcomplementoToolbaretiqueta de la biblioteca de soporteAhora bien, ¿cómo podemos controlarlo desde
MyFragmentclase? veamosdentro de la
onCreateViewfunción agregue lo siguientey si desea agregar
itemsa la barra de herramientas dentro deMyFragmentusted,mustagregue esta línea dentro de laonCreateViewfunciónEsta línea es importante, si la olvida, Android no completará los elementos de su menú.
asumimos que los identificamos en
menu/fragment_menu.xmldespués de eso, anula las siguientes funciones
espero que esto ayude
fuente
Como respuesta actualizada a la respuesta de Pierre-Antoine LaFayette
ActionBarActivity está en desuso; usar
AppCompatActivityen su lugarfuente
Para aquellos que usan kotlin,
fuente