导航抽屉主要活动内容

时间:2017-04-05 20:03:28

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

嗨我在主要活动java类的android应用程序中有导航抽屉,这是代码

    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;
     }
 }

这是主要的活动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>

所以我想在应用程序的主要活动xml页面中添加一些内容,如图像和文本,但是当我在导航的主要内容中添加它时,它看起来很好,一切都还可以,但是当我点击例如来自的gallary片段时导航抽屉它带我到新页面,其中有我放入gallary xml的内容,但问题是主要活动的内容也出现在我从导航抽屉点击的所有片段页面 如何在没有主要活动内容的情况下显示每个片段的内容 有谁理解我? @ _ @

2 个答案:

答案 0 :(得分:2)

我建议你不要使用除navigationView之外的任何元素以及将为navigationDrawer项目显示你的屏幕的片段,因为如果点击某个项目,你将被重定向到该页面,但是如果你想要的话回到那个mainactivity页面几乎是不可能的。要么重新启动活动,要么尝试一些复杂的方法来实现它。

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

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

但是如果您仍然想这样做,您可以将主要活动的元素设置为可见性消失。我不知道这种方法是否有效。

应在导航项目单击

上设置
[your_element].setVisibility(View.GONE);

答案 1 :(得分:0)

你的片段彼此重叠。 在从抽屉中选择导航项时,请确保在添加新片段之前删除先前的片段:

true