Arriba Navegación (flecha de la barra de acción flecha) no funciona para fragmentos
Tengo cajón de diseño como un diseño de base de mi actividad y estoy reemplazando dos fragmentos en un marco presente dentro de este cajón de diseño. El primer fragmento no se agrega en la pila trasera del fragmento. Estoy mostrando icono de hamburguesa en mi actividad (también quiero el menú del cajón en mi primer fragmento). En el segundo fragmento deshabilité el icono de la hamburguesa por mActionBarDrawerToggle.setDrawerIndicatorEnabled(false)
y actionBar.setDisplayHomeAsUpEnabled(true)
botón de nuevo usando actionBar.setDisplayHomeAsUpEnabled(true)
.
En los primeros fragmentos onResume I habilitado icono de hamburguesa por mActionBarDrawerToggle.setDrawerIndicatorEnabled (true) `para que cuando el usuario presiona el botón hacia atrás (tanto el hardware como el botón de la barra de acción) del segundo fragmento, el usuario volverá al primer fragmento y el icono de la hamburguesa estará habilitado . Todo está funcionando bien sólo no soy capaz de volver de segundo fragmentos barra de acción atrás botón. No puedo hacer clic en él. A continuación se muestra mi código: –
- Cómo personalizar la fuente de subtítulos de la barra de acción?
- ¿Cómo mantener visible la barra de herramientas con adjustPan?
- Barra de herramientas de llamada en cada actividad
- Cómo obtener la barra de herramientas de fragmento?
- ¿Cuál es el equivalente de onPrepareOptionsMenu para la barra de herramientas de soporte?
Código de actividad
if (Utility.isLargeScreen(this)) setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); else setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); mHiddenGemsApplication = (HiddenGemsApplication) getApplication(); super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); initViews(); setSupportActionBar(mToolbar); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayShowTitleEnabled(false); actionBar.setDisplayHomeAsUpEnabled(true); } mTextViewActionBarTitle.setText(getString(R.string.app_name)); mActionBarDrawerToggle = new ActionBarDrawerToggle(HomeActivity.this, mDrawerLayout, mToolbar, R.string.open_drawer, R.string.close_drawer) { @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); } @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); } }; mDrawerLayout.setDrawerListener(mActionBarDrawerToggle); mActionBarDrawerToggle.syncState(); mFragmentManager = getSupportFragmentManager(); replaceFragment(new CategoryFragment(), getString(R.string.app_name), CategoryFragment.TAG); @Override public void onBackPressed() { if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) { mDrawerLayout.closeDrawers(); return; } super.onBackPressed(); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: if (mFragmentManager.getBackStackEntryCount() > 0) { mFragmentManager.popBackStack(); } return true; default: return super.onOptionsItemSelected(item); } } public void replaceFragment(Fragment fragment, String actionBarTitle, String tag) { if (mFragmentManager == null) return; FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.content_frame, fragment, tag); if (!tag.equals(CategoryFragment.TAG)) fragmentTransaction.addToBackStack(tag); fragmentTransaction.commit(); setActionBarTitle(actionBarTitle); } public void setActionBarTitle(String actionBarTitle) { if (!TextUtils.isEmpty(actionBarTitle)) mTextViewActionBarTitle.setText(actionBarTitle); } public void setDrawerIndicatorEnabled(boolean value) { if (mActionBarDrawerToggle != null) { mActionBarDrawerToggle.setDrawerIndicatorEnabled(value); } }
XML de la actividad
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="nirvaniclabs.com.hiddengems.activities.HomeActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <include android:id="@+id/toolbarlayout" layout="@layout/toolbar_layout" /> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/toolbarlayout" /> </RelativeLayout> <android.support.design.widget.NavigationView android:id="@+id/navigation" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:menu="@menu/navigation_items" /> </android.support.v4.widget.DrawerLayout>
Primer Fragmento: –
private Button mButtonTemp; private AppCompatActivity mActivity; public static String TAG = "CategoryFragment"; public CategoryFragment() { // Required empty public constructor } @Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof Activity) mActivity = (AppCompatActivity) context; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View viewGroup = inflater.inflate(R.layout.fragment_category, container, false); initViews(viewGroup); mButtonTemp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ((HomeActivity) mActivity).replaceFragment(new TripListFragment(), "Trip Fragment", TripListFragment.TAG); } }); return viewGroup; } private void initViews(View viewGroup) { mButtonTemp = (Button) viewGroup.findViewById(R.id.btn_temp); } @Override public void onResume() { super.onResume(); ((HomeActivity) mActivity).setDrawerIndicatorEnabled(true); ((HomeActivity) mActivity).setActionBarTitle(getString(R.string.app_name)); }
Segundo fragmento
private AppCompatActivity mActivity; public static String TAG = "TripListFragment"; public TripListFragment() { // Required empty public constructor } @Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof Activity) mActivity = (AppCompatActivity) context; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); ActionBar actionBar = mActivity.getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayShowTitleEnabled(false); actionBar.setDisplayHomeAsUpEnabled(true); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_trip_list, container, false); } @Override public void onResume() { super.onResume(); ((HomeActivity) mActivity).setDrawerIndicatorEnabled(false); }
Además, cuando estoy en el segundo fragmento soy capaz de deslizar y ver el menú del cajón. No quiero este comportamiento, el menú del cajón sólo debe abrirse en el fragmento 1.
Si cualquier cosa es incorrecta en mi código por favor hágamelo saber.
- El reproductor de video apaga el modo en Android usando appcompat-v7
- La barra de herramientas no se desplaza en la barra de estado transparente
- Añadir vista personalizada a la derecha de la barra de herramientas
- ¿Cómo obtener una barra de progreso bajo el ActionBar en Material Design?
- ¿Cómo puedo arreglar el estilo Spinner para Android 4.x colocado en la parte superior de la barra de herramientas
- Barra de herramientas: botón de menú de desbordamiento siempre mostrando
- Diferencia entre support.v7.widgets y android.widgets Barra de herramientas, Fragment
- Establecer el título inToolBar de Fragment en Android
Finalmente obtuve la respuesta. En mi escenario estoy desactivando el indicador de cajón por mActionBarDrawerToggle.setDrawerIndicatorEnabled(false);
Y debido a este icono de Navegación los clics se han inhabilitado. Para habilitar esto, tengo que agregar ToolbarNavigationClickListener
a ActionBarDrawerToggle
que habilitará los clics de iconos de navegación.
A continuación se muestra el código de mi trabajo: –
mActionBarDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } });
Refiérase a este enlace para más aclaraciones
Después de luchar con el mismo problema durante edades, finalmente conseguí poner el botón Arriba para trabajar en fragmentos con este código. Debe tener setHasOptionsMenu configurado en onCreate () o onCreateView ()
setHasOptionsMenu(true);
A continuación, en onOptionsItemSelected () agregue esta comprobación para que el botón de inicio / inicio se presione a la instrucción switch () [o if …]:
@Override public boolean onOptionsItemSelected(MenuItem item) { xL(); switch (item.getItemId()) { case android.R.id.home : getActivity().onBackPressed(); break; case R.id.mn_exit : exitFragment(); break; default : break; } return super.onOptionsItemSelected(item); }
- Cómo cargar imágenes de Internet en gridview de manera eficiente?
- Buscando una pila SIP para Android