Android: cambia el título en ActionBar desde el Gaveta de navegación

He creado una aplicación con el Navigation Drawer en BaseActivity . Todo funciona bien, excepto el cambio de título en la Action Bar . El título cambia por un segundo pero al abrir la nueva actividad se muestra el título original.

¿Cuál puede ser el error? Gracias

BaseActivity

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); PerfilAdapter.iniciarBaseDatos(this); perfilObj = PerfilAdapter.selectPerfil(1); requestWindowFeature(Window.FEATURE_ACTION_BAR); cargarActionBar(); cargarDrawerLayout(savedInstanceState); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } switch (item.getItemId()) { case R.id.menuOpcSonidos: ... return true; case R.id.menuOpcCambiarColor: ... return true; default: return super.onOptionsItemSelected(item); } } @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.findItem(R.id.menuOpcSonidos) .setTitle(getResources().getString(R.string.sonidoOnOff) + " " + perfilObj.getSonidos()); return super.onPrepareOptionsMenu(menu); } private void cargarActionBar() { ActionBar actionBar = getActionBar(); int[] colores2 = Modulo.cargarColoresDrawerlayout(perfilObj.getColor()); actionBar.setBackgroundDrawable(new GradientDrawable(Orientation.BOTTOM_TOP, colores2)); getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); int titleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "android"); TextView textoTitulo = (TextView)findViewById(titleId); textoTitulo.setTextColor(getResources().getColor(R.color.blanco)); textoTitulo.setTypeface(null, Typeface.BOLD); textoTitulo.setTextSize(19); textoTitulo.setShadowLayer(5, 0, 0, getResources().getColor(R.color.negro)); } private void cargarDrawerLayout(Bundle b) { mTitle = mDrawerTitle = getTitle(); textosMenuLateral = getResources().getStringArray(R.array.nav_drawer_items); iconosMenuLateral1 = getResources() .obtainTypedArray(R.array.iconos_menu_lateral1); iconosMenuLateral2 = getResources() .obtainTypedArray(R.array.iconos_menu_lateral2); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerList = (ListView) findViewById(R.id.list_slidermenuMain); int[] colores = {0, 0xFFFFFFFF, 0}; mDrawerList.setDivider(new GradientDrawable(Orientation.RIGHT_LEFT, colores)); mDrawerList.setDividerHeight(4); navDrawerItems1 = new ArrayList<DrawerItem>(); navDrawerItems1.add(new DrawerItem(textosMenuLateral[0], iconosMenuLateral1.getResourceId(0, -1))); navDrawerItems1.add(new DrawerItem(textosMenuLateral[1], iconosMenuLateral1.getResourceId(1, -1))); navDrawerItems1.add(new DrawerItem(textosMenuLateral[2], iconosMenuLateral1.getResourceId(2, -1))); navDrawerItems1.add(new DrawerItem(textosMenuLateral[3], iconosMenuLateral1.getResourceId(3, -1))); navDrawerItems1.add(new DrawerItem(textosMenuLateral[4], iconosMenuLateral1.getResourceId(4, -1))); navDrawerItems2 = new ArrayList<DrawerItem>(); navDrawerItems2.add(new DrawerItem(textosMenuLateral[0], iconosMenuLateral2.getResourceId(0, -1))); navDrawerItems2.add(new DrawerItem(textosMenuLateral[1], iconosMenuLateral2.getResourceId(1, -1))); navDrawerItems2.add(new DrawerItem(textosMenuLateral[2], iconosMenuLateral2.getResourceId(2, -1))); navDrawerItems2.add(new DrawerItem(textosMenuLateral[3], iconosMenuLateral2.getResourceId(3, -1))); navDrawerItems2.add(new DrawerItem(textosMenuLateral[4], iconosMenuLateral2.getResourceId(4, -1))); iconosMenuLateral1.recycle(); iconosMenuLateral2.recycle(); mDrawerList.setOnItemClickListener(new SlideMenuClickListener()); adapter = new DrawerListAdapter(getApplicationContext(), navDrawerItems1, navDrawerItems2, perfilObj.getColor(), pos); mDrawerList.setAdapter(adapter); mDrawerToggle = new ActionBarDrawerToggle( this, mDrawerLayout, R.drawable.icono_drawer, R.string.app_name, R.string.app_name ) { public void onDrawerClosed(View view) { getActionBar().setTitle(mTitle); invalidateOptionsMenu(); } public void onDrawerOpened(View drawerView) { getActionBar().setTitle(mDrawerTitle); invalidateOptionsMenu(); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); if (b == null) { opcionesPanelLateral(0); } } private class SlideMenuClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { TextView textView = (TextView) view.findViewById(R.id.title); textView.setTypeface(null, Typeface.BOLD); opcionesPanelLateral(position); } } private void opcionesPanelLateral(int position) { Intent i; switch (position) { case 0: pos = 0; break; case 1: i = new Intent(this, ActivitySecond.class); mDrawerLayout.closeDrawer(mDrawerList); startActivity(i); pos = 1; break; case 2: i = new Intent(this, ActivityThird.class); mDrawerLayout.closeDrawer(mDrawerList); startActivity(i); pos = 2; break; case 3: i = new Intent(this, ActivityFourth.class); mDrawerLayout.closeDrawer(mDrawerList); startActivity(i); pos = 3; break; case 4: break; default: break; } mDrawerList.setItemChecked(pos, true); mDrawerList.setSelection(pos); setTitle(textosMenuLateral[pos]); mDrawerLayout.closeDrawer(mDrawerList); } @Override public void setTitle(CharSequence title) { mTitle = title; getActionBar().setTitle(mTitle); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); cargarActionBar(); cargarDrawerLayout(savedInstanceState); mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); } public void onBackPressed() { mDrawerLayout.closeDrawer(mDrawerList); } 

Creo que el error es el uso de las Actividades … pero no lo sé como solución

Android Studio permite agregar un cajón de navegación a la aplicación a través de Archivo | Nuevo | Actividad . Este cajón de navegación "ready-made" viene con todo lo que necesita: propiedades, métodos, eventos, etc.

Los siguientes pasos para cambiar los títulos de los diferentes fragmentos están diseñados para usarlos con el cajón de navegación de Android Studio, pero pueden ser útiles para cualquier otro:

  1. El cajón de navegación tiene varios archivos: una actividad y uno o más fragmentos. Abra el archivo de actividad java de su cajón de navegación (lo que usted llama "Actividad básica").

  2. Encontrar el método onCreate .

  3. En este método, agregue la línea mTitle = "???" , dónde "???" Es el título del primer fragmento que me mostrará tan pronto como aparezca la pantalla del cajón de navegación.

  4. Ahora encuentre el método onNavigationDrawerItemSelected . CHARLIE, no estoy seguro, pero creo que lo tienes bajo el nombre de opcionesPanelLateral .

  5. En este método usted tiene un interruptor . Este interruptor abre el fragmento apropiado dependiendo de la opción seleccionada. Para establecer el título de cada fragmento, vaya a cada caso en el conmutador y agregue la línea mTitle = "Mi título"; Antes de frg = new my_frag (); . De esta manera, cuando el fragmento se abre, mostrará el título apropiado.

  6. Método de búsqueda restoreActionBar . CHARLIE, no lo veo en tu código ni en ningún otro método equivalente. Añadirlo. Dentro de ella, agregue la línea actionBar.setTitle (mTitle); , Y aquí es donde el título está realmente establecido (tal vez por eso desaparece su título). Llame a este método dentro de OnCreateOptionsMenu (después de inflar).

Eso es. Estoy usando cadenas codificadas, si sigue las reglas de Android, use strings.xml.

Ahora un ejemplo de vida real y la aplicación en la que estoy trabajando ahora mismo. A continuación está el código en bruto de mi "BaseActivity" del cajón de navegación ya hecho (algunas cosas están en español porque soy costarricano):

 package my_package; //------------------------------------------------------------------------------ import android.app.Activity; import android.graphics.drawable.ColorDrawable; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.support.v4.widget.DrawerLayout; //------------------------------------------------------------------------------ public class menu_act extends ActionBarActivity implements drawer_frg.NavigationDrawerCallbacks { //------------------------------------------------------------------------------ // Fragment managing the behaviors, interactions and presentation of the navigation drawer. private drawer_frg mNavigationDrawerFragment; // Used to store the last screen title. For use in {@link #restoreActionBar()}. private CharSequence mTitle; //------------------------------------------------------------------------------ @Override protected void onCreate ( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); setContentView( R.layout.menu_lay ); mNavigationDrawerFragment = (drawer_frg) getSupportFragmentManager().findFragmentById( R.id.navigation_drawer ); mTitle = "Perfil"; // getTitle(); // Set up the drawer. mNavigationDrawerFragment.setUp( R.id.navigation_drawer,( DrawerLayout ) findViewById( R.id.drawer_layout ) ); // BARRA DE TÍTULO ANARANJADA. //ActionBar actionBar = getSupportActionBar(); //actionBar.setBackgroundDrawable( new ColorDrawable( getResources().getColor( R.color.col_nar ) ) ); } //------------------------------------------------------------------------------ @Override public void onNavigationDrawerItemSelected ( int position ) { Fragment frg; // getSupportActionBar().setDisplayOptions( ActionBar.DISPLAY_SHOW_CUSTOM ); switch ( position ) { case 0 : //getSupportActionBar().setCustomView( R.layout.perfil_tit ); mTitle = "Perfil"; frg = new perfil_frg(); break; case 1 : // getSupportActionBar().setCustomView( R.layout.contactos_tit ); mTitle = "Contactos"; frg = new contactos_frg(); break; default : frg = PlaceholderFragment.newInstance( position + 1 ); } FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction().replace( R.id.container,frg ).commit(); } //------------------------------------------------------------------------------ public void onSectionAttached ( int number ) { switch (number) { case 1 : mTitle = getString( R.string.mnu_opc_per ); break; case 2 : mTitle = getString( R.string.mnu_opc_con ); break; case 3 : mTitle = getString( R.string.mnu_opc_sal ); break; } } //------------------------------------------------------------------------------ public void restoreActionBar () { ActionBar actionBar = getSupportActionBar(); actionBar.setNavigationMode( ActionBar.NAVIGATION_MODE_STANDARD ); actionBar.setDisplayShowTitleEnabled( true ); actionBar.setTitle( mTitle ); } //------------------------------------------------------------------------------ @Override public boolean onCreateOptionsMenu(Menu menu) { if ( ! mNavigationDrawerFragment.isDrawerOpen() ) { // Only show items in the action bar relevant to this screen // if the drawer is not showing. Otherwise, let the drawer // decide what to show in the action bar. getMenuInflater().inflate( R.menu.menu_act,menu ); restoreActionBar(); return true; } return super.onCreateOptionsMenu( menu ); } //------------------------------------------------------------------------------ @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); /* //noinspection SimplifiableIfStatement if ( id == R.id.action_settings ) return true; */ //mDrawerToggle.syncState(); return super.onOptionsItemSelected( item ); } //============================================================================== // A placeholder fragment containing a simple view. public static class PlaceholderFragment extends Fragment { //------------------------------------------------------------------------------ // The fragment argument representing the section number for this fragment. private static final String ARG_SECTION_NUMBER = "section_number"; //------------------------------------------------------------------------------ // Returns a new instance of this fragment for the given section number. public static PlaceholderFragment newInstance(int sectionNumber) { PlaceholderFragment fragment = new PlaceholderFragment(); Bundle args = new Bundle(); args.putInt(ARG_SECTION_NUMBER, sectionNumber); fragment.setArguments(args); return fragment; } //------------------------------------------------------------------------------ public PlaceholderFragment() { } //------------------------------------------------------------------------------ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.menu_frg, container, false); return rootView; } //------------------------------------------------------------------------------ @Override public void onAttach(Activity activity) { super.onAttach(activity); ((menu_act) activity).onSectionAttached( getArguments().getInt(ARG_SECTION_NUMBER)); } //============================================================================== } //------------------------------------------------------------------------------ } 
  • Cambiar el texto y el color de fondo en la barra de título (Android)?
  • Centro Alinee el título en la barra de acción utilizando estilos en android.
  • Añadir leyenda a la imagen en el nuevo whatsapp ver 2.11.399 (android)
  • ¿Cómo puedo añadir un spinner a la barra de título de una actividad?
  • Android: la barra de progreso en el título de la ventana no se muestra
  • Título de la actividad de Android vs Título de ActionBar
  • Cómo quitar la barra de título de Actividad que extiende ActionBarActivity o AppcompatActivity con tema de diálogo
  • ¿Cómo puedo detectar un clic en el título de ActionBar?
  • Cómo deshabilitar la barra de estado o barra de notificación, pero no deshabilitar la barra de título en android?
  • Eliminación de un tono de llamada mediante programación en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.