[英]How to open Fragments and Activities in the same function (with drawer layout)?
因此,我有这段代码可以通过导航抽屉打开片段,但不允许打开活动:
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
Fragment fragment = null;
Class fragmentClass = null;
if (id == R.id.nav_home) {
Intent homeIntent = new Intent(this, MainActivity.class);
startActivity(homeIntent); //Doesn't Work
} else if (id == R.id.nav_contacts) {
fragmentClass = Contactos.class; //Works
} else if (id == R.id.nav_about) {
fragmentClass = Sobre.class; /Works
} else if (id == R.id.nav_settings){
Intent settingIntent = new Intent(this, SettingsActivity.class); //Doesn't Work
startActivity(settingIntent);
}
try {
fragment = (Fragment) fragmentClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();
DrawerLayout drawer = (DrawerLayout) findViewById(drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
所以我在网上搜索了其他解决方案,有了这个新的解决方案,我可以打开活动,但是不能打开片段:|
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
Fragment fragment = null;
Class fragmentClass = null;
switch (id) {
case R.id.nav_home:
Intent homeIntent = new Intent(this, MainActivity.class); //Works
startActivity(homeIntent);
break;
case R.id.nav_contacts:
fragmentClass = Contactos.class; //Doesn't Work
break;
case R.id.nav_about:
fragmentClass = Sobre.class; //Doesn't Work
break;
case R.id.nav_settings:
Intent settingsIntent = new Intent(this, SettingsActivity.class); //Works
startActivity(settingsIntent);
break;
}
return false;
}
如何打开这两件东西? 感谢任何帮助:)
1)您不会在第二个片段中替换片段。
2)您为onNavigationItemSelected()方法返回false 。 这就是为什么它不起作用。
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
FragmentManager fm = getSupportFragmentManager();
switch (id) {
case R.id.nav_home:
Intent homeIntent = new Intent(this, MainActivity.class);
startActivity(homeIntent);
break;
case R.id.nav_contacts:
fm.beginTransaction().replace(R.id.fl_content, new Contactos(), "Tag").commit();
break;
case R.id.nav_about:
fm.beginTransaction().replace(R.id.fl_content, new Sobre(), "Tag").commit();
break;
case R.id.nav_settings:
Intent settingsIntent = new Intent(this, SettingsActivity.class); //Works
startActivity(settingsIntent);
break;
}
DrawerLayout drawer = (DrawerLayout) findViewById(drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
如果要转到MainActivity,请确保在MainActivity中也具有fl_content布局。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.