2015-10-01 136 views
0

我對導航抽屜使用導航視圖...並且在抽屜中存在某些菜單項並且當我單擊某個特定的新活動時打開,並且我想打開該活動的導航抽屜..我嘗試了一種方法,我不得不將主要活動(有抽屜的那個)擴展到活動(或第二個活動)中......並在第二個活動中添加它,而不是setcontentview ..但事情是我的第二個活動xml就在mainactivity.xml之上。我看到上面的活動(mainactivity.xml之上的第二個活動)如何僅顯示抽屜的第二個活動。所有活動中的導航抽屜

LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View activityView = layoutInflater.inflate(R.layout.activity_credits, null,false); 
     // add the custom layout of this activity to frame layout. 
     drawerLayout.addView(activityView); 
+0

當你點擊你的主要活動中有一個抽屜它打開一個新的活動或只是顯示一個片段? – user3641702

+0

打開一個新的活動(比如說第二個活動) –

+1

您是否嘗試過設置內容視圖而不是誇大它?當你開始一個新的活動,你不能膨脹它,你應該使用setcontentview。編輯:你爲什麼不使用碎片?它在整個導航保持相同的導航抽屜 – user3641702

回答

2

您可以實現通過創建一個通用類這個任務說BaseActivity.java並把你的抽屜式導航欄的代碼在這個類。並使用您想要顯示導航抽屜的BaseActivity.java擴展您的課程。

public class BaseActivity extends AppCompatActivity { 

    public Toolbar toolbar;        // Declaring the Toolbar Object 


    ActionBarDrawerToggle mDrawerToggle; 
    Context context; 
    private NavigationView navigationView; 
    private DrawerLayout drawerLayout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    protected boolean useToolbar() { 
     return true; 
    } 


    @Override 
    public void setContentView(int layoutResID) { 
     context = this; 

     DrawerLayout fullView = (DrawerLayout) getLayoutInflater().inflate(R.layout.drawer_main, null); 
     FrameLayout activityContainer = (FrameLayout) fullView.findViewById(R.id.frame); 
     getLayoutInflater().inflate(layoutResID, activityContainer, true); 

     super.setContentView(fullView); 
     toolbar = (Toolbar) fullView.findViewById(R.id.tool_bar); 

     setSupportActionBar(toolbar); 
     getSupportActionBar().setTitle(""); 
     toolbar.setTitle(""); 
     this.getSupportActionBar().setElevation(0); 

     getSupportActionBar().setLogo(R.drawable.ic_arrahm); 
     // toolbar.setLogo(R.drawable.ic_main); 
     if (useToolbar()) { 
      setSupportActionBar(toolbar); 
      setTitle("Places Near Me"); 
     } else { 
      toolbar.setVisibility(View.GONE); 
     } 


     //Initializing NavigationView 
     navigationView = (NavigationView) findViewById(R.id.navigation_view); 

     //Setting Navigation View Item Selected Listener to handle the item click of the navigation menu 
     navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 

      // This method will trigger on item Click of navigation menu 
      @Override 
      public boolean onNavigationItemSelected(MenuItem menuItem) { 
       //Checking if the item is in checked state or not, if not make it in checked state 
       if (menuItem.isChecked()) menuItem.setChecked(false); 
       else menuItem.setChecked(true); 

       //Closing drawer on item click 
       drawerLayout.closeDrawers(); 

       //Check to see which item was being clicked and perform appropriate action 
       switch (menuItem.getItemId()) { 
        case R.id.edit_profile:     
         return true; 
        case R.id.change_password: 
         return true; 
        default: 
         Toast.makeText(getApplicationContext(), "Work in progress", Toast.LENGTH_SHORT).show(); 
         return true; 
       } 
      } 
     }); 

     // Initializing Drawer Layout and ActionBarToggle 
     drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); 
     View header = navigationView.getHeaderView(0); 
     TextView tvName = (TextView) header.findViewById(R.id.name); 
     TextView tvEmail = (TextView) header.findViewById(R.id.email); 
     String name = Preferences.getDataFromStringPreferences(context,Constants.USER_DETAILS, Constants.USER_NAME); 

     if (name != null) { 
      tvName.setText(name); 
     } 


     ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.openDrawer, R.string.closeDrawer) { 

      @Override 
      public void onDrawerClosed(View drawerView) { 
       // Code here will be triggered once the drawer closes as we dont want anything to happen so we leave this blank 
       super.onDrawerClosed(drawerView); 
      } 

      @Override 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
      } 
     }; 

     //Setting the actionbarToggle to drawer layout 
     drawerLayout.setDrawerListener(actionBarDrawerToggle); 

     //calling sync state is necessay or else your hamburger icon wont show up 
     actionBarDrawerToggle.syncState(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     return super.onPrepareOptionsMenu(menu); 
    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     return mDrawerToggle.onOptionsItemSelected(item); 
    } 
} 

創建drawer_main.xml佈局文件

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/drawerLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <include 
      android:id="@+id/tool_bar" 
      layout="@layout/toolbar" /> 

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

     </FrameLayout> 

    </LinearLayout> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/navigation_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:headerLayout="@layout/drawer_header" 
     app:menu="@menu/drawer"> 


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

下佈局創建toolbar.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:background="@color/colorPrimary" 
    android:elevation="4dp" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark" 
    > 
</android.support.v7.widget.Toolbar> 

創建drawer_header.xml佈局資源文件

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="178dp" 
    android:background="@color/colorPrimary" 
    android:orientation="vertical" 
    android:padding="20dp" 
    android:weightSum="1"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="56dp" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/name" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="16dp" 
      android:text="" 
      android:textColor="#ffffff" 
      android:textSize="14sp" 
      android:textStyle="bold" 

      /> 

     <TextView 
      android:id="@+id/email" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="16dp" 
      android:text="" 

      android:textColor="#ffffff" 
      android:textSize="14sp" 
      android:textStyle="normal" 

      /> 
    </LinearLayout> 

    <ImageView 
     android:id="@+id/circleView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 

     android:layout_centerInParent="true" 
     android:layout_marginLeft="16dp" 
     android:layout_marginTop="30dp" /> 
</RelativeLayout>