- Forum-Beiträge: 22
01.12.2015, 18:59:28 via Website
01.12.2015 18:59:28 via Website
Hallo,
bei meinen letzten Projekten habe ich immer großzügig neue Activitys erstellt und nutze jetzt zum ersten Mal die Möglichkeit von Fragments.
Jetzt ist aber das Problem an sich, dass die Back Navigation über die Hardware Taste, egal wo ich in der App bin, diese schließt.
Ich habe jetzt versucht in der Main Activity onBackPressed so zu modifizieren, dass er erkennt welches Fragment gerade geladen ist und dann das entsprechende Parent Fragment lädt. Was zwar funktioniert, aber er lädt das Fragment, was ich noch sehe, beendet dann aber trotzdem die App.
Des weiteren weiß ich nicht ob mein Fragmant Managment allgemein nicht zu kompliziert ist und ob evtl einfacherer oder elegantere Lösungen gibt.
Meine Activity sieht zur Zeit so aus:
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{
public FragmentManager fragmentManager;
public FragmentTransaction fragmentTransaction;
public MainActivityFragment fragmentMain;
public MediAbcFragment fragmentMedisAbc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
fragmentManager = getSupportFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentMain = new MainActivityFragment();
fragmentTransaction.replace(R.id.fragment, fragmentMain, "FragmentMain");
fragmentTransaction.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.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();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
switch (id){
case R.id.nav_start:
fragmentManager = getSupportFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment, fragmentMain, "FragmentMain");
fragmentTransaction.commit();
break;
case R.id.nav_medis:
fragmentManager = getSupportFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentMedisAbc = new MediAbcFragment();
fragmentTransaction.replace(R.id.fragment, fragmentMedisAbc, "FragmentMedisAbc");
fragmentTransaction.commit();
break;
default:
break;
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
if(fragmentMedisAbc != null && fragmentMedisAbc.isVisible()){
fragmentManager = getSupportFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment, fragmentMain, "FragmentMain");
fragmentTransaction.commit();
}
}
}
Gruß
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.