Establecer el título inToolBar de Fragment en Android
He estado utilizando la última barra de herramientas de AppCompatv7 lib.I han colocado un textview en el ToolBar ViewGroup Y quiero establecer un título en este Textview del fragmento en mi activity.In caso de una barra de acción personalizada ((ActionBarActivity) getActivity) .setcustomView (..) habría hecho el trabajo. Pero debido al uso de esta barra de herramientas no soy capaz de usar that.Also he implementado un método en mi BaseActivity que es heredado por todas las actividades.Esta BaseActivity contiene mi método para inicializar Un cajón deslizante a la izquierda. Tengo que inicializar el método initDrawerLayout () en la actividad de otra manera el cajón no sería inicializado. Y si lo inicializo en fragmento su darme todos los resultados vacíos, ni el botón de conmutación para el cajón y tampoco es el Título de encargo que consigue fijado.
Este es mi código initDrawer ..
- ¿Cómo hacer clic en las vistas detrás de una barra de herramientas?
- Desapareciendo el título de la barra de herramientas
- Reemplazar el diseño de la barra de herramientas de acuerdo con el fragmento visualizado
- ¿Cuál es el equivalente de onPrepareOptionsMenu para la barra de herramientas de soporte?
- Barra de herramientas android popupTheme vs theme
public void initDrawerLayout(String toolbar_text) { mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerRelative = (RelativeLayout) findViewById(R.id.drawer_relative); if (mDrawerLayout != null) { findViewById(R.id.drawer_btn_a).setOnClickListener(this); findViewById(R.id.drawer_btn_b).setOnClickListener(this); findViewById(R.id.drawer_btn_c).setOnClickListener(this); findViewById(R.id.drawer_btn_d).setOnClickListener(this); findViewById(R.id.drawer_btn_e).setOnClickListener(this); findViewById(R.id.drawer_btn_f).setOnClickListener(this); findViewById(R.id.drawer_btn_g).setOnClickListener(this); findViewById(R.id.drawer_btn_h).setOnClickListener(this); findViewById(R.id.drawer_btn_i).setOnClickListener(this); findViewById(R.id.drawer_btn_j).setOnClickListener(this); findViewById(R.id.drawer_btn_k).setOnClickListener(this); findViewById(R.id.drawer_btn_l).setOnClickListener(this); findViewById(R.id.my_layout).setOnClickListener(this); Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); toolbar.setBackground(getResources().getDrawable(R.drawable.icn_actionbar_background)); TextView mTitle = (TextView) toolbar.findViewById(R.id.toolbar_title); mTitle.setText(toolbar_text); mTitle.setTypeface(Typeface.DEFAULT_BOLD); if (toolbar != null) { setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } toolbar.setNavigationIcon(R.drawable.ic_drawer); mDrawerToggle = new ActionBarDrawerToggle( this, mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close ); mDrawerLayout.setDrawerListener(mDrawerToggle); toolbar.setNavigationOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) { mDrawerLayout.closeDrawer(Gravity.LEFT); } else { mDrawerLayout.openDrawer(Gravity.LEFT); } } }); mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); mDrawerLayout.setScrimColor(getResources().getColor( android.R.color.transparent)); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayShowTitleEnabled(false); } }
Y este mi código en el fragmento ..
((FirstActivity) getActivity()).initDrawerLayout(mFirst.name);
Donde mFirst es un objeto de clase Person
Y el código de la barra de herramientas.
<android.support.v7.widget.Toolbar android:id="@+id/my_awesome_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?attr/actionBarSize"> <TextView android:id="@+id/toolbar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:text="Toolbar Title" android:textColor="@color/action_text-color" android:textSize="18sp" android:textStyle="bold" /> </android.support.v7.widget.Toolbar>
Por favor ayuda chicos ..
- Android El menú de acción personalizada de la barra de herramientas de diseño de material no está alineado correctamente
- Cambiar el menú de la barra de herramientas Color del elemento (acción no oculta)
- Elemento de menú de la barra de herramientas haga clic en fragmentos
- Superposición de contenido por encima de AppBarLayout utilizando nuevo diseño de material
- Android - ¿Cómo agregar el contador de la insignia al icono del menú de la navegación de la hamburguesa?
- Fuente personalizada en la barra de herramientas de android
- Cómo agregar insignias en la barra de herramientas Iconos MenuItem
- ¿Cómo implementar WhatsApp como el diseño de materiales SearchView?
Para permitir que un fragmento comunique hasta su actividad (para establecer el título de su barra de herramientas), puede definir una interfaz en la clase Fragmento e implementarla dentro de la Actividad como se describe aquí: Comunicación con otros fragmentos .
Hago esto como esto: desde la llamada fragmento
getActivity().setTitle("your title");
También puedes llamar a cualquier función de tu padre Actividad como esta:
YourActivity mYourActiviy = (YourActivity) getActivity(); mYourActivity.yourActivityFunction(yourParameters);
Puedes cambiar el título de tu barra de herramientas en el evento OnAttach, algo así
var toolbar = activity.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar); toolbar.Title = "New Title";
La respuesta está escrita a continuación en el método de oncreateview
de fragmentos.
getActivity().setTitle("your name");
getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { @Override public void onBackStackChanged() { FragmentManager.BackStackEntry lastBackStackEntry=null; int lastBackStackEntryCount = getSupportFragmentManager().getBackStackEntryCount() - 1; if(lastBackStackEntryCount >= 0 ) { lastBackStackEntry = getSupportFragmentManager().getBackStackEntryAt(lastBackStackEntryCount); } Toast.makeText(MainActivity.this, ""+lastBackStackEntryCount, Toast.LENGTH_SHORT).show(); if(lastBackStackEntryCount == -1) { toolbar.setTitle(""); toolbar.setLogo(R.drawable.header_logo); } else { toolbar.setTitle(lastBackStackEntry.getName()); } } });
En su Actividad, declare la barra de herramientas como pública.
public class YourActivity : Activity { public Toolbar toolbar; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = .... // initilize your toolbar } }
Entonces, de su fragmento
((YourActivity) getActivity()).toolbar.Title = "Your Title";
Es necesario establecer el título en la actividad de comisión del fragmento y devolver el fragmento
getSupportFragmentManager().beginTransaction().replace(R.id.main_fragment, mainFragment).commit(); toolbar.setTitle("ShivShambhu"); return contentFragment;
Esto funciona para mí.
Si alguien lucha con este problema, esto puede ser útil.
Básicamente tienes 4 opciones, cómo manejar eso:
- Utilice una interfaz para comunicarse con su actividad, o cualquier otro método conveniente, como un bus de eventos.
- Usted llama a
getActivity().setTitle("Title")
, pero en este caso debe adjuntar suToolbar
deToolbar
a laActionBar
llamando asetSupportActionBar()
en su actividad. - Puede tener una instancia pública de su
Toolbar
deToolbar
y acceder a esa instancia del fragmento. -
Por último, si necesita la instancia de su
Toolbar
deToolbar
(es posible que desee hacer algo más con), puede simplemente obtener de esta manera:Toolbar bar=Toolbar.class.cast(getActivity().findViewById(R.id.toolbar));
Bueno, la última opción resolvería el problema sólo si la Toolbar
no se ha pasado al método setSupportActionBar
.
Si lo ha sido, entonces debe llamar a este método en su actividad:
supportActionBar.setDisplayShowTitleEnabled(false)
,
Que resolverá el problema.
Sin embargo, yo sugeriría utilizar ButterKnife que lo hará un poco más limpio, aquí un ejemplo:
Toolbar actionBar=findById(getActivity(),R.id.actionBar); actionBar.setTitle("Title");
Si está utilizando una barra de herramientas personalizada, esto le ayudará a:
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); toolbar.setTitle("Feedback");