La pressione indietro non torna al frammento precedente

Ho un problema con l'aggiunta delle transactions di frammento alla pila posteriore. Ho un'attività principale in cui popolo il mio layout con un frammento di menu:

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); } 

}

  • Pulsante per cuffia con doppio click in android
  • Android: controlla se il GPS sta cercando, ha risolto o non è in uso
  • Sostituire la row di ListView con un altro layout suClick
  • Come creare fatture per la dimensione della printingnte POS in android?
  • org.apache.http.entity.FileEntity è deprecata in Android 6 (Marshmallow)
  • Risoluzione di grande schermo di Android libgdx
  • Quindi, all'interno del MainMenuFragment, l'utente sceglie un'opzione che comport la sostituzione del frammento di menu con un altro frammento:

     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(); } } 

    }

    Per quello che capisco, questo dovrebbe renderlo in modo che quando l'utente premere il button indietro sul proprio dispositivo, verrà riportto al frammento di menu, ma invece si chiude l'applicazione. Che cosa sto facendo di sbagliato?

  • come aggiungere l'elenco individuale / correlato al gridview ordine alfabetico?
  • Android, Proguard e Javamail
  • Come aggiungere ore lavorative a data senza considerare l'aggiunta di fine settimana? - Java
  • imballaggio della mia app e condividere con altri android
  • Contenuto di Sdcard non visibile in Esplora file di DDMS Android 6.0
  • Android, ListView IllegalStateException: "Il contenuto della scheda è cambiato ma ListView non ha ricevuto una notifica"
  • 4 Solutions collect form web for “La pressione indietro non torna al frammento precedente”

    Il codice è un mixup, si utilizza ActionBarActivity da appcompat e non utilizza getSupportFragmentManager () e l'importzione di frammenti dovrebbe essere l'appcompat uno se si decide di utilizzarlo. Altrimenti, utilizzare l'attività anziché ActionBarActivity e l'importzione semplice di Fragment con FragmentManager

    Aggiungi questo alla tua attività android:configChanges="keyboardHidden|orientation|screenSize" Questo arresterà la tua attività a riavviare quando si ruota. utilizzare setRetainInstance(true) sui frammenti.

    Nella tua attività sovrascrivi:

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

    E probabilmente è necessario utilizzare in each transazione di frammento commesso:

     FragmentTransaction.addToBackStack(null); 

    Non si aggiunge il MainMenuFragment allo stack posteriore. Puoi provare questo nella tua attività:

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

    Quando si aggiunge o sostituisce un frammento con FragmentManager , è necessario aggiungere manualmente il vecchio frammento al backstack con addToBackStack() prima di call commit() .

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.