Android 无法从导航抽屉项加载片段

Android 无法从导航抽屉项加载片段,android,android-fragments,android-fragmentactivity,Android,Android Fragments,Android Fragmentactivity,我在这方面发现了很多,但我真的无法解决我的问题。我花了几个小时在这上面,但什么也没有 我有一个使用Android Studio 2.1.1模板制作的导航抽屉活动。当然,当我点击菜单中的一个项目,显示不同的片段时,我想改变我的应用程序的视图。这是我在Main活动中的代码: public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks her

我在这方面发现了很多,但我真的无法解决我的问题。我花了几个小时在这上面,但什么也没有

我有一个使用Android Studio 2.1.1模板制作的导航抽屉活动。当然,当我点击菜单中的一个项目,显示不同的片段时,我想改变我的应用程序的视图。这是我在Main活动中的代码:

        public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_camera) {

            Context context = getApplicationContext();
            CharSequence text = "Hello toast!";
            int duration = Toast.LENGTH_SHORT;

            Toast toast = Toast.makeText(context, text, duration);
            toast.show();

            new gaussFragment();

        } else if (id == R.id.nav_gallery) {

        } else if (id == R.id.nav_slideshow) {

        } else if (id == R.id.nav_manage) {

        } else if (id == R.id.nav_share) {

        } else if (id == R.id.nav_send) {

        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
当我点击导航抽屉的第一个项目(id为R.id.nav_camera的项目)时,我可以看到土司,但新的片段没有出现。我在
gaussFragment()
中使用此代码:

当然,您可以看到片段_gauss.xml是其相对布局,包含以下代码:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="info.androidhive.tabsswipexx.gaussFragment">

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/hello_blank_fragment" />

</FrameLayout>

我怎样才能解决这个问题


当应用程序启动时,我首先看到的是内容。我是否应该尝试添加以下内容

<FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />


如果您使用的是Android Studio提供的导航抽屉模板,那么在导航抽屉主活动xml中,您会发现如下内容:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <!-- The main content view -->
    <include layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <!-- the navigation drawer the comes from the left-->
    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"

        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

</android.support.v4.widget.DrawerLayout>
在这里,您将看到3个主要部分,一个用于工具栏,一个用于浮动操作按钮控件,最后一个用于导航抽屉未打开时将在主视图中显示的内容,这就是您关心的内容。如果在
中按住ctrl键并单击,您将看到第三个xml,您必须添加Fragmet容器。最后是这样的:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/app_bar_main"
    tools:context="copsonic.com.SoundExchange.demoApp.MainActivity">

    <!-- A fragmet container to dynamically swap between fragmets-->
    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>
第二件事是正确处理每次在导航抽屉中选择一个选项时将显示哪个片段

public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_camera) {

            Context context = getApplicationContext();
            CharSequence text = "Hello toast!";
            int duration = Toast.LENGTH_SHORT;

            Toast toast = Toast.makeText(context, text, duration);
            toast.show();

            FragmentTransmitter Gauss= new new gaussFragment();

            //pass useful info to fragment if needed
            Bundle args = new Bundle();
            args.putSerializable(getString(R.string.ModulationType),aModulation);
            Gauss.setArguments(args);

            FragmentTransaction transaction =   getSupportFragmentManager().beginTransaction();
            transaction.replace(R.id.fragment_container, Gauss,"TAG_GaussFragment"); //pacing a tag is not mandatory but it is pretty useful if you want to know later which fragment is being displayed in the fragment container
            //transaction.addToBackStack(null);
            transaction.commit();



        } else if (id == R.id.nav_gallery) {

        } else if (id == R.id.nav_slideshow) {

        } else if (id == R.id.nav_manage) {

        } else if (id == R.id.nav_share) {

        } else if (id == R.id.nav_send) {

        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

好的,你制作了一个新片段,它立即被垃圾回收。。。你需要一个片段事务才能将其加载到FrameLayouth我如何编写它?看看是否有帮助,然后带着问题回来。阿尔贝托我第一次尝试这样做时花了好几个小时,但我在一个地方找不到a在寻找什么,所以我希望我的完整数据包回答能帮助你
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/app_bar_main"
    tools:context="copsonic.com.SoundExchange.demoApp.MainActivity">

    <!-- A fragmet container to dynamically swap between fragmets-->
    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>
FragmentTransmitter initialFragment = new FragmentTransmitter();


// Check that the activity is using the layout version with
// the fragment_container FrameLayout
if (findViewById(R.id.fragment_container) != null) {

        // this check allows you not to load the default fragment unless 
        //it's the first time you launch the activity after having destroyed it
        if (savedInstanceState != null) {
            return;
        }

    // Create the fragment that is seen the first time your app opens

    //pass useful info to the fragment from main activity if needed 
    //(it is recommended not to do this in the constructor, so you have to do it through a Bundle)
    Bundle args = new Bundle();
    args.putSerializable("ModulationType",aModulation);
    initialFragment.setArguments(args);


    // In case this activity was started with special instructions from an
    // Intent, pass the Intent's extras to the fragment as arguments
    //initialFragment.setArguments(getIntent().getExtras());

    // Add the fragment to the 'fragment_container' FrameLayout
    getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, initialFragment).commit();

}
public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_camera) {

            Context context = getApplicationContext();
            CharSequence text = "Hello toast!";
            int duration = Toast.LENGTH_SHORT;

            Toast toast = Toast.makeText(context, text, duration);
            toast.show();

            FragmentTransmitter Gauss= new new gaussFragment();

            //pass useful info to fragment if needed
            Bundle args = new Bundle();
            args.putSerializable(getString(R.string.ModulationType),aModulation);
            Gauss.setArguments(args);

            FragmentTransaction transaction =   getSupportFragmentManager().beginTransaction();
            transaction.replace(R.id.fragment_container, Gauss,"TAG_GaussFragment"); //pacing a tag is not mandatory but it is pretty useful if you want to know later which fragment is being displayed in the fragment container
            //transaction.addToBackStack(null);
            transaction.commit();



        } else if (id == R.id.nav_gallery) {

        } else if (id == R.id.nav_slideshow) {

        } else if (id == R.id.nav_manage) {

        } else if (id == R.id.nav_share) {

        } else if (id == R.id.nav_send) {

        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }