setsupportactionbar example custom bar appbarlayout android android-fragments android-actionbar android-support-library android-toolbar

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