我不能在我的导航抽屉上做一个监听器,你能告诉我我哪里错了吗?
i can't make a listener on my navigation drawer, can you tell me where do i wrong?
我从空 activity 创建这个 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
时,这个 activity 会在构建时崩溃,我哪里错了吗?
//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();
}
使用这个
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);
and also change this remove DrawerLayout
findViewById(R.id.drawer)
and put Your NavigationView
ID
EXample findViewById(R.id.YournavigationView);
NavigationView navigationView = (NavigationView) findViewById(R.id.YournavigationView);
我从空 activity 创建这个 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
时,这个 activity 会在构建时崩溃,我哪里错了吗?
//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();
}
使用这个
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);
and also change this remove
DrawerLayout
findViewById(R.id.drawer)
and put YourNavigationView
ID
EXample
findViewById(R.id.YournavigationView);
NavigationView navigationView = (NavigationView) findViewById(R.id.YournavigationView);