繁体   English   中英

如何在同一功能(带抽屉布局)中打开“片段和活动”?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM