Java 如何在同一功能中打开片段和活动(使用抽屉布局)?
所以我有一段代码,允许我通过导航抽屉打开片段,但不允许打开活动:Java 如何在同一功能中打开片段和活动(使用抽屉布局)?,java,android,android-fragments,android-activity,Java,Android,Android Fragments,Android Activity,所以我有一段代码,允许我通过导航抽屉打开片段,但不允许打开活动: @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { int id = item.getItemId(); Fragment fragment = null; Class fragmentClass = null; if (id ==
@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中也有一个FLU内容布局。请检查我的答案。编辑,请检查。是的,它工作了,现在可以打开所有内容,谢谢。只是布局有问题主要活动上方显示的片段有什么问题?请解释一下。您必须将MainActivity的所有内容包装在相对/线性/框架布局中,id为fl_content,以便从MainActivity导航到抽屉中的片段。当我单击about activity时,它会显示在主活动上方,而主活动仍然可单击且可见,但没有问题,我已修复它,非常感谢你的帮助