2017-11-18 46 views
0

我创建这个drawer从空的活动,所以我不使用fragment我不能在我的导航抽屉上做听众,你能告诉我我的错在哪?

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{ 

private FirebaseAuth.AuthStateListener authListener; 
private FirebaseAuth auth; 
private Button signOut; 
private DrawerLayout nDrawer; 
private ActionBarDrawerToggle nToggle; 

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

,当我把这个setNavigaionViewListener,这个活动会崩溃的身材,做我错了地方?

//setNavigationViewListner(); 

    //get firebase auth instance 
    auth = FirebaseAuth.getInstance(); 

我不知道为什么,但得到当前用户不工作,但我没有得到错误的地方。

//get current user 
    final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 

    authListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 
      if (user == null) { 
       // user auth state is changed - user is null 
       // launch login activity 
       startActivity(new Intent(MainActivity.this, LoginActivity.class)); 
       finish(); 
      } 
     } 
    }; 

    signOut = (Button) findViewById(R.id.sign_out); 
    nDrawer = (DrawerLayout) findViewById(R.id.drawer); 
    nToggle = new ActionBarDrawerToggle(MainActivity.this,nDrawer,R.string.open,R.string.close); 

    nDrawer.addDrawerListener(nToggle); 
    nToggle.syncState(); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    signOut.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      signOut(); 
      startActivity(new Intent(MainActivity.this, LoginActivity.class)); 
     } 
    }); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (nToggle.onOptionsItemSelected(item)){ 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

//method to set Listener 

private void setNavigationViewListner() { 
    NavigationView navigationView = (NavigationView) findViewById(R.id.drawer); 
    navigationView.setNavigationItemSelectedListener(this); 

} 

@Override 
public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
    switch (item.getItemId()){ 
     case R.id.account:{ 
      startActivity(new Intent(MainActivity.this, ProfileActivity.class)); 
      break; 
     } 

     case R.id.logout:{ 
      signOut(); 
      startActivity(new Intent(MainActivity.this, LoginActivity.class)); 
      break; 
     } 
    } 
    nDrawer.closeDrawer(GravityCompat.START); 
    return true; 
} 

//sign out method 
public void signOut() { 
    auth.signOut(); 

} 
+0

你需要看看[堆栈跟​​踪](http://stackoverflow.com/questions/23353173),以确定飞机失事的原因。也就是说,你使用'R.id.drawer'来查找'DrawerLayout'和'NavigationView'。它不能兼而有之。 –

回答

0

使用此

Toolbar toolbar = (Toolbar) findViewById(R.id.Yourtoolbar); 
nToggle = new ActionBarDrawerToggle(
     MainActivity.this, nDrawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 

,而不是这个

nToggle = new ActionBarDrawerToggle(MainActivity.this,nDrawer,R.string.open,R.string.close); 

,改变这个删除DrawerLayoutfindViewById(R.id.drawer),并把你的NavigationViewID

例如findViewById(R.id.YournavigationView);

NavigationView navigationView = (NavigationView) findViewById(R.id.YournavigationView); 
+0

我把 私人工具栏工具栏; setNavigationonViewListner(); 和你告诉的变化 NavigationView navigationView =(NavigationView)findViewById(R.id.drawer); nToggle = new ActionBarDrawerToggle( MainActivity.this,nDrawer,toolbar,R.string.navigation_drawer_open,R.string.navigation_drawer_close); 但不工作,我错了吗? –

+0

@avid_kupit检查更新ans – Prem

+0

是啊,我把一个工具栏,并像你sugesst,但仍然没有工作 NavigationView navigationView =(NavigationView)findViewById(R.id.drawer); 工具栏工具栏=(工具栏)findViewById(R.id.toolbar); nToggle = new ActionBarDrawerToggle( MainActivity.this,nDrawer,toolbar,R.string.navigation_drawer_open,R.string.navigation_drawer_close); –