当前位置: 首页 > 知识库问答 >
问题:

如何在导航抽屉中使用片段?

东方高洁
2023-03-14

我试过了。我不成功。我正在写我的步骤。如果有人能帮我。

>

  • 使用Android Studio创建新项目并选择“导航抽屉活动”
  • 我将FrameLayout放在主活动中,如下所示

    <?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">
    
        <include
            layout="@layout/app_bar_vshome"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
        <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_vshome"
            app:menu="@menu/activity_vshome_drawer" />
    
        <!-- Framelayout to display Fragments -->
        <FrameLayout
            android:id="@+id/frame_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </android.support.v4.widget.DrawerLayout>
    

    我使用v4创建了新类,如下所示。应用程序。碎片

    public class VSAllTopics extends Fragment{
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            return inflater.inflate(R.layout.fragment_all_topics, container, false);
        }
    }
    

    我制作了碎片管理器,如下所示,

    public class FragmentManager extends Fragment {
    
    } 
    

    调用**public boolean onNavigationItemSelected(MenuItem项)**

    android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction ft = fragmentManager.beginTransaction();
    
    if (id == R.id.nav_camera) {
    
        ft.replace(R.id.frame_container, new VSAllTopics(), "VS_ALL").commit();
    

    我学了一点,但没能成功。这不是电话。

    如果我通过意图来调用它,它会删除导航;(

    如何正确使用侧菜单。

    谢谢。

  • 共有3个答案

    白丁雨
    2023-03-14

    然后您可以编辑

    activity_main_drawer.xml

    并添加您自己的项目及其各自的图标。

    您还可以在中编辑导航标题视图

    navigation\u header\u main。xml

    为了在活动中的NavigationDrawer中使用片段

    使用方法如下:

    public boolean onNavigationItemSelected(MenuItem item) {
      // Handle navigation view item clicks here.
      int id = item.getItemId();
    
      switch (id) {
        case R.id.item1:
          getSupportFragmentManager().beginTransaction().replace(R.id.fragment1, new item1Fragment()).commit();
          break;
    
        case R.id.change_settings:
          getSupportFragmentManager().beginTransaction().replace(R.id.fragment1, new item2Fragment()).commit();
          break;
    
      }
    
    }
    苏阳州
    2023-03-14

    导航视图应位于布局中的FrameLayout之后。

    Android按照xml中显示的顺序绘制每个视图。由于FrameLayout具有宽度和高度的match\u父级,android将在NavigationView上方绘制它。

    以下是解决方案的代码:

    <include
    layout="@layout/app_bar_vshome"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    
    <!-- Framelayout to display Fragments -->
    <FrameLayout
        android:id="@+id/frame_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    
    <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_vshome"
        app:menu="@menu/activity_vshome_drawer" />
    
    曹泉
    2023-03-14

    在活动布局中

    <androidx.drawerlayout.widget.DrawerLayout
        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"
        tools:context=".view_controllers.diagrams.DiagramEditorScreen"
        android:id="@+id/diagramEditorMainDrawerLayout"
    >
    
    .... {your activity layout}
    
        <com.google.android.material.navigation.NavigationView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="start"
                android:id="@+id/diagramEditorSlideInMenuNavigationView"
                app:itemTextColor="@color/white"
        >
            <FrameLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:id="@+id/diagramEditorSlideInMenuFragmentHolder"
            >
            </FrameLayout>
        </com.google.android.material.navigation.NavigationView>
    </androidx.drawerlayout.widget.DrawerLayout>
    

    然后在您的ActiveonCreate方法中添加侦听器

    val actionDrawerToggle = ActionBarDrawerToggle(this, diagramEditorMainDrawerLayout, R.string.open, R.string.close)
    diagramEditorMainDrawerLayout.addDrawerListener(actionDrawerToggle)
    actionDrawerToggle.syncState()
    

    当您准备好显示导航视图时,您可以在navigationView中替换片段

    supportFragmentManager.beginTransaction()
        .replace(R.id.diagramEditorSlideInMenuFragmentHolder, {your-fragment}, {your-fragment-tag})
        .commit()
    
    diagramEditorMainDrawerLayout.openDrawer(GravityCompat.START)
    

    注意:以上是使用androidX完成的。如果您不使用androidX,您对NavigationView的布局调用应该是

    <android.support.v4.widget.DrawerLayout
    ....
    >
       <android.support.design.widget.NavigationView 
       ... 
       />
    
    </android.support.v4.widget.DrawerLayout>
    
     类似资料:
    • 问题内容: 我知道这些类型的问题已经在这里,但仍然找不到这个问题的答案: 我已经创建了一个应用程序,并使用了由该应用程序自动创建的导航抽屉(AndroidStudio) 这是我所拥有的: 还有更多: 我想使用导航抽屉中的按钮显示另一个片段。我想使用此代码,所以请不要向我发送任何制作自己的抽屉的指南或教程。 现在的问题是,我该怎么放 ,并在情况下,我想打开另一个片段?谢谢。 还有一个问题: 如何添加

    • 问题内容: 我是Android编程的新手,但是到目前为止一直表现不错。我已经读过很多关于这个问题的答案,但似乎无法使我的工作正常。基本上,我拥有的是带有导航抽屉的MainActivity。我有两个用相应的片段布局xmls正确初始化的片段。目前,我可以在启动应用程序时以及在单击抽屉中的每个项目时显示我的第一个片段;标题会发生变化;但是,片段保持不变。有什么建议?我认为相关的代码在下面(未显示的是Na

    • 我希望能够使用导航抽屉,并根据导航中的选择在不同片段之间进行更改。 我正在使用Android Studio,基本上我所做的是这样的: 使用内置模板“导航抽屉活动”创建了一个新项目 创建了一个空白片段 然后我更改了onNavigationDrawerItemSelected方法中的一些代码。 我的程序崩溃了,给了我很多我不理解的错误。我做错了什么?

    • 问题内容: 我有一个导航图,该导航图将此片段用作主活动XML中的主页。 我有一个带有菜单的Drawer布局,单击导航抽屉按钮时,我无法设法使导航正常工作(它可以从主要片段工作,但是当我单击Drawer按钮时,不能工作),如果我使用的是旧方法使用:对导航抽屉编程,我的navcontroller丢失了!!我得到类似的错误 navcontroller无法识别目标片段,因为即使不是这种情况,控制器也会看到

    • 我有一个导航图,它在主活动XML中使用这个片段作为主页。 我有一个带菜单的抽屉布局,当我点击抽屉菜单按钮时,我无法使导航工作(它从主片段工作,但当我点击抽屉按钮时就不工作),如果我使用旧的方式来编程抽屉菜单:

    • 我有一个带有导航抽屉的应用程序,一个活动和许多片段。当我改变设备方向时,我的主要活动是重新创建,出现的是我的主要片段,而不是当前片段。就像我启动应用程序时一样。 如何恢复当前片段以及与所选片段相关的数据? 我看过这篇文章,但它不起作用:用抽屉菜单保存片段状态 提前感谢那些能帮助我的人。