2017-04-05 198 views
0

在這裏我做了一個DrawerBase活動讓所有我的Activity都有相同的DrawerLayout,但是當我這樣做的時候,發生了一些無聊的事情,當我開始一個新的Intent來啓動新的Activity時沒有關閉抽屜。DrawerLayout沒有關閉抽屜

這是我的代碼,希望有人能幫助我。

package cn.rezero.utool; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.annotation.NonNull; 
import android.support.design.widget.NavigationView; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.AppCompatActivity; 
import android.view.MenuItem; 

import cn.rezero.utool.Note.NotelistActivity; 

/** 
* Created by ReZero on 2017/4/5. 
*/ 

public class DrawerBase extends AppCompatActivity { 

    protected DrawerLayout mDrawerLayout; 

    protected NavigationView navigationView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     navigationView = (NavigationView) findViewById(R.id.nav_view); 

     navigationView.setCheckedItem(R.id.nav_moment); 
     navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
      @Override 
      public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
       switch (item.getItemId()){ 
        case R.id.nav_lbs: 
         startActivity(new Intent(DrawerBase.this, BmapActivity.class)); 
         mDrawerLayout.closeDrawers(); 
         break; 
        case R.id.nav_note: 
         startActivity(new Intent(DrawerBase.this, NotelistActivity.class)); 
         mDrawerLayout.closeDrawers(); 
         break; 
        case R.id.nav_web: 
         startActivity(new Intent(DrawerBase.this, BrowserActivity.class)); 
         mDrawerLayout.closeDrawers(); 
        default: 
       } 

       return true; 
      } 
     }); 


    } 

} 





this a test demo : 

    public class MainActivity extends DrawerBase { 


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

    } 
} 

回答

0

從你的抽屜佈局刪除此行...

setContentView(R.layout.activity_main); 

並覆蓋這樣

@Override 
public void setContentView(int layoutResID) { 
    DrawerLayout fullView = (DrawerLayout) getLayoutInflater().inflate(R.layout.activity_base, null); 
    FrameLayout activityContainer = (FrameLayout) fullView.findViewById(R.id.activity_content); 
    getLayoutInflater().inflate(layoutResID, activityContainer, true); 
    super.setContentView(fullView); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    setTitle("Activity Title"); 
} 

中的setContentView更換

startActivity(new Intent(DrawerBase.this, BmapActivity.class)); 
mDrawerLayout.closeDrawers(); 

mDrawerLayout.closeDrawer(GravityCompat.START); 
startActivity(new Intent(this, BmapActivity.class)); 
return true; 

你可以從這裏看到Adding a Toolbar and Navigation Drawer Across all Activities of an Android App

+0

對不起,但它沒有工作,更重要的是,意圖似乎沒有開始一項新的活動。 – Rezero

+0

@Rezero嘗試更新回答 –

+0

非常感謝您的有用信息。 – Rezero

0
使用

此:

mDrawerLayout.closeDrawer(GravityCompat.START);

0

使用這種方法的全面實施

/** 
* Close Navigation Drawer 
*/ 
private void closeNavMenu() { 
    if (mDrawerLayout != null && mDrawerLayout.isDrawerOpen(GravityCompat.START)) { 
     mDrawerLayout.closeDrawer(GravityCompat.START); 
    } 
} 
0

你就試試這個

mDrawerLayout.closeDrawer(GravityCompat.START); 
0

您需要使用

if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) { 
mDrawerLayout.closeDrawer(GravityCompat.START); 
} 

,而不是

mDrawerLayout.closeDrawers();