2017-04-05 6 views
0

ここで私はすべてのアクティビティーに同じDrawerLayoutを持たせるためにDrawerBaseアクティビティーを作成しますが、私がこのようにすると、新しいアクティビティーを開始する新しいインテントを開始するときに退屈なことが起こりました引き出しを閉じなかった。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

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

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

を交換

...あなたの引き出しのレイアウトから

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をオーバーライドします

あなたがここに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

を完全な実装を見ることができ、あなたはちょうどあなたが

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

ではなくを使用する必要があり、この

mDrawerLayout.closeDrawer(GravityCompat.START); 
0

を試してみてください

mDrawerLayout.closeDrawers(); 
関連する問題