android - 抽屉导航主要 Activity 内容

标签 android android-studio android-fragments navigation-drawer

您好,我的 android 应用程序中的主要 Activity java 类中有抽屉导航,这是代码

    public class MainActivity extends AppCompatActivity
         implements NavigationView.OnNavigationItemSelectedListener {   

         @Override
         protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

         Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
         setSupportActionBar(toolbar);

         DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
         ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                 this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
         drawer.setDrawerListener(toggle);
         toggle.syncState();

         NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
         navigationView.setNavigationItemSelectedListener(this);

         //add this line to display menu1 when the activity is loaded
         displaySelectedScreen(R.id.nav_menu1);
     }

     @Override
     public void onBackPressed() {
         DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
         if (drawer.isDrawerOpen(GravityCompat.START)) {
             drawer.closeDrawer(GravityCompat.START);
         } else {
             super.onBackPressed();
         }
     }

     private void displaySelectedScreen(int itemId) {

         //creating fragment object
         Fragment fragment = null;
         DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);

         //initializing the fragment object which is selected
         switch (itemId) {
             case R.id.nav_menu1:
                 fragment = new gallary();
                 break;
             case R.id.nav_menu2:
                 fragment = new about();
                 break;
             case R.id.nav_menu3:
                 fragment = new contact();
                 break;
         }

         //replacing the fragment
         if (fragment != null) {
             FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
             ft.replace(R.id.content_frame, fragment);
             ft.commit();
         }

         drawer.closeDrawer(GravityCompat.START);
     }


     @SuppressWarnings("StatementWithEmptyBody")
     @Override
     public boolean onNavigationItemSelected(MenuItem item) {

         //calling the method displayselectedscreen and passing the id of selected menu
         displaySelectedScreen(item.getItemId());
         //make this method blank
         return true;
     }
 }

这是主要的 Activity xml代码

<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_main"
            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_main"
            app:menu="@menu/activity_main_drawer" />

    </android.support.v4.widget.DrawerLayout>

所以我想在应用程序的主要 Activity xml 页面中添加一些内容,例如图像和文本,但是当我将它添加到导航的主要内容中时,它看起来不错,一切正常,但是当我单击例如 gallary fragment 时抽屉导航它把我带到了新页面,其中包含我放入 gallary xml 的内容,但问题是主要 Activity 的内容也出现在我从抽屉导航单击的所有 fragment 页面中 我怎样才能让每个 fragment 的内容在没有主要 Activity 内容的情况下出现 有人懂我吗? @_@

最佳答案

我建议您不要使用除 navigationView 之外的任何元素和将在屏幕上显示 navigationDrawer 项目的 fragment ,因为如果您单击某个项目,您将被重定向到该页面,但稍后如果您想要回到主 Activity 页面几乎是不可能的。要么重新启动 Activity ,要么尝试一些复杂的方法来实现。

相反,您应该使用 fragment 。您可以调用默认 fragment ,该 fragment 将在 onResume() 方法中打开应用程序时加载。该 fragment 也应该在导航项中可用,以供以后引用。您可以这样做:

    fragment = new YourFragment();
    transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.contentfragment,fragment).commitNow();

但如果你仍然想这样做,你可以将mainactivity的元素的可见性设置为gone。不知道这个方法行不行。

这应该在导航项点击时设置

[your_element].setVisibility(View.GONE);

关于android - 抽屉导航主要 Activity 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43240620/

相关文章:

java - 平板电脑屏幕优化

android - 如何在 kotlin 中获取当前构建变体

java - 在两个以上的 fragment 之间传递数据

android - map 版本 V1 在 Android 10 中崩溃

android - java.lang.IllegalArgumentException : No view found for 异常

android - fragment 、setRetainInstance(true) 和线程库

java - 以编程方式获取字体轮廓

Android WebView 错误地处理预格式化文本中的换行符

java - RxJava 队列多观察

java - 处理 recyclerview 单击 fragment 而不是 holder 类