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时,它会显示在主活动上方,而主活动仍然可单击且可见,但没有问题,我已修复它,非常感谢你的帮助