android - example - ¿Cómo obtener la barra de herramientas desde el fragmento?
toolbar android example (7)
Tengo ActionBarActivity
con NavigationDrawer
y uso la Toolbar
support_v7 como ActionBar. En uno de mis fragmentos la barra de herramientas tiene vista personalizada. En otros fragmentos, la Toolbar
debería mostrar el título.
¿Cómo obtener la instancia de la Toolbar
para personalizar desde fragmentos? Puedo obtener ActionBar con getActivity().getActionBar()
, pero si setTitle()
para esta instancia ActionBar, no hago nada.
UPD:
En mi caso
((ActionBarActivity) getActivity()).getSupportActionBar().setTitle();
(como dijo Mr Engineer13) no funcionan en la creación del primer fragmento porque lo llamo fromHiddenChanged (). Ahora agrego más uno a onCreateView () y funciona bien.
En caso de que los fragmentos tengan una vista personalizada de ToolBar, puede implementar ToolBar para cada fragmento por separado.
agregue ToolBar en fragment_layout:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimaryDark"/>
encontrarlo en fragmento:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container, false);
Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
//set toolbar appearance
toolbar.setBackground(R.color.material_blue_grey_800);
//for crate home button
AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.setSupportActionBar(toolbar);
activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
el oyente del menú se puede crear de dos maneras: anula onOptionsItemSelected en tu fragmento:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case android.R.id.home:
getActivity().onBackPressed();
}
return super.onOptionsItemSelected(item);
}
o configure listener para la barra de herramientas cuando lo cree en onCreateView ():
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
return false;
}
});
Puedes crear un método para esto en tu clase de actividad:
public void setToolbarTitle(String title) {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(title);
}
Y puedes usar esto:
setToolbarTitle("Hello World");
Tal vez tengas que probar getActivity().getSupportActionBar().setTitle()
si estás utilizando support_v7.
Tienes dos opciones para obtener la barra de herramientas en fragmento
El primero
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
y segundo
Toolbar toolbar = ((MainActivity) getActivity()).mToolbar;
getActivity()
debe AppCompatActivity
su actividad de getActivity()
a AppCompatActivity
. Aquí hay un ejemplo:
((AppCompatActivity) getActivity()).getSupportActionBar().setTitle();
La razón por la que tiene que realizar el getActivity()
es porque getActivity()
devuelve FragmentActivity
y necesita una AppCompatActivity
De tu fragmento: (¿obtener la barra de herramientas del fragmento?)
// get toolbar
((MainAcivity)this.getActivity()).getToolbar(); // getToolbar will be method in Activity that returns Toolbar!! don''t use getSupportActionBar for getting toolbar!!
// get action bar
this.getActivity().getSupportActionBar();
¡Esto es muy útil cuando está utilizando un spinner en la barra de herramientas y llama al spinner oa las vistas personalizadas en la barra de herramientas desde un fragmento!
De tu actividad:
// get toolbar
this.getToolbar();
// get Action Bar
this.getSupportActionBar();
toolbar = (Toolbar) getView().findViewById(R.id.toolbar);
AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.setSupportActionBar(toolbar);