Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


La presión no regresa al fragmento anterior

Tengo un problema con agregar las transacciones del fragmento a la pila trasera. Tengo una actividad principal en la que relleno mi diseño con un fragmento de menú:

public class MainActivity extends ActionBarActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getFragmentManager().beginTransaction().add(R.id.frag_container, new MainMenuFragment()).commit(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @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(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } 

}

A continuación, dentro del MainMenuFragment, el usuario elige alguna opción que da como resultado la sustitución del fragmento de menú por otro fragmento:

 public class MainMenuFragment extends Fragment implements OnItemClickListener{ GridView grid; FragmentManager manager; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = inflater.inflate(R.layout.main_menu_fragment, container, false); manager = getActivity().getFragmentManager(); grid = (GridView) root.findViewById(R.id.gridView1); grid.setAdapter(new MenuTileAdapter(getActivity())); grid.setOnItemClickListener(this); return root; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { FragmentTransaction trans = manager.beginTransaction(); if (position == 0){ trans.replace(R.id.frag_container, new BasicSettingsFragment()); trans.addToBackStack(null); trans.commit(); } } 

}

Por lo que entiendo, esto debe hacer que para que cuando el usuario presiona el botón de regreso en su dispositivo, que será devuelto al fragmento de menú, pero en su lugar esta cierra la aplicación. ¿Qué estoy haciendo mal?

4 Solutions collect form web for “La presión no regresa al fragmento anterior”

Tu código es una mezcla, usas ActionBarActivity desde appcompat y no usas getSupportFragmentManager () y la importación de fragmentos debe ser la appcompat si decides usarla. Si no, utilice Actividad en lugar de ActionBarActivity y la importación de Fragmentos simple con FragmentManager

Agregue esto a su actividad android:configChanges="keyboardHidden|orientation|screenSize" Esto evitará que su actividad se reinicie al girar. setRetainInstance(true) en fragmentos.

En su actividad sobreescribir:

 @Override public void onBackPressed() { if (getFragmentManager().getBackStackEntryCount() > 0) { getFragmentManager().popBackStack(); } else { super.onBackPressed(); } } 

Y probablemente usted necesita usar en cada transacción fragmentada comprometida:

 FragmentTransaction.addToBackStack(null); 

No agrega el MainMenuFragment a la pila trasera. Puedes probar éste en tu actividad:

 getFragmentManager().beginTransaction().add( R.id.frag_container, new MainMenuFragment()). addToBackStack(null).commit(); 

Cuando agrega o reemplaza un fragmento con el FragmentManager , debe agregar manualmente el fragmento antiguo al backstack con addToBackStack() antes de llamar a commit() .

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.