studio icono example desplegable custom boton bar agregar android android-toolbar android-navigation

icono - Cómo implementar el botón Atrás de la barra de herramientas de Android



menu overflow android studio (6)

Apenas agregue dos nueva línea de código. Algo como esto

Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); toolbar.setBackgroundColor(getResources().getColor(R.color.white)); toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.back_arrow)); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } });

Estoy usando una barra de herramientas personalizada. Necesito agregar botón de nuevo a él. Ahora estoy usando este código para agregar el botón Atrás.

Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); toolbar.setBackgroundColor(getResources().getColor(R.color.white)); toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.back_arrow)); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } });

Esto funciona bien. Puedo ver el botón de retroceso añadido. Pero considere el caso en el que estoy en Fragment1, que no tiene botón de retroceso. Ahora me muevo a Fragment2 y agrego el botón Atrás. Desde el Fragmento 2 abro el Fragmento 3 y añado nuevamente el botón Atrás.

Ahora, cuando presiono el botón Atrás desde el fragmento3 para volver al fragmento2, tengo que revisar la Pila de fragmentos para ver si se requiere el botón Atrás en el fragmento 2 o no.

¿Hay alguna otra forma de manejar el botón Atrás automáticamente cuando empujamos los fragmentos para apilarlos?


Esto supone que está utilizando una AppCompatActivity

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = (Toolbar) findViewById(R.id.tool_bar); // Attaching the layout to the toolbar object setSupportActionBar(toolbar); // enabling action bar app icon and behaving it as toggle button getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); }

Luego, en el onOptionsItemSelected puede anular el botón de inicio de la siguiente manera:

@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; } else if(id == android.R.id.home){ Intent i= new Intent(this, MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(i); finish(); return true; } return super.onOptionsItemSelected(item); }


Funciona en función presionada atrás a la barra de herramientas

private setUpToolBar() { Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); }


Puedes manejar el icono de atrás muy fácilmente. Si todos sus fragmentos están en una sola actividad, realmente recomiendo manejar esto de la siguiente manera:

primero cree una clase abstracta de BaseFragment que implemente FragmentManager .OnBackStackChangedListener luego ponga el siguiente método dentro de eso:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mainActivity = (MainActivity) getActivity(); getFragmentManager().addOnBackStackChangedListener(this); shouldDisplayHomeUp(); } @Override public void onBackStackChanged() { shouldDisplayHomeUp(); } public boolean shouldDisplayHomeUp() { //Enable Up button only if there are entries in the back stack boolean canBack = false; try { canBack = getFragmentManager().getBackStackEntryCount() > 0; } catch (Exception ex) { // Log.e(getClass().getCanonicalName(), ex.getMessage());getMessage } if (canBack) { mainActivity.drawerDisable(); } else { mainActivity.drawerEnable(); } return canBack; }

De esta manera, la función disableDrawer & enableDrawer maneja su ícono y el método OnBackPressed maneja su BackStack Now en su actividad cuando presiona la visualización del ícono back si es necesario. tu onBackPressed debe ser algo como esto:

int backStackCount = getSupportFragmentManager().getBackStackEntryCount(); if (backStackCount == 0) { //nothing exist in backStack OS handle it super.onBackPressed(); } else { getSupportFragmentManager().popBackStack(); }

Vea la implementación completa here .


Tengo actividad principal y cuatro fragmentos. En MainActivity escribo este código

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } });

esto funciona bien y si tiene fragmentos, cree un método onBackPressed ()

@Override public void onBackPressed() { int position = mViewPager.getCurrentItem(); if(position == 2) { // go back to search / result tab from info detail tab mViewPager.setCurrentItem(2); } else if(position == 0) { // switch from result to search tab or go back to home tab SectionsPagerAdapter sectionsPagerAdapter = (SectionsPagerAdapter) mViewPager.getAdapter(); Fragment fragment = sectionsPagerAdapter.getItem(position); if(fragment instanceof ResultFragment) { Bundle bundle = ((ResultFragment) fragment).getArguments(); if(bundle != null) { sectionsPagerAdapter.replaceFragment(SearchFragment.newInstance(bundle.getString(GlobalInfo.TAG_ID), bundle.getString(GlobalInfo.PART_NO), bundle.getString(GlobalInfo.SERIAL_NO), bundle.getString(GlobalInfo.PART_NAME)), getString(R.string.search), 0); } } else { mViewPager.setCurrentItem(1); } } else if(position == 3){ SectionsPagerAdapter sectionsPagerAdapter = (SectionsPagerAdapter) mViewPager.getAdapter(); Fragment fragment = new ToolMgtFragment(); sectionsPagerAdapter.replaceFragment(fragment,"Tool Mgt", 3); } else { super.onBackPressed(); } }


Usa el método en clase tu actividad

private void setupToolbar(){ Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar); setSupportActionBar(toolbar); ActionBar actionBar=getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayShowHomeEnabled(true); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); }