我一直在尝试将导航抽屉活动添加到我的代码中,我遵循了一个旧教程,在创建时没有创建片段,但我仍然尝试使其工作,我认为我做的一切都是正确的,但当打开模拟器时,应用程序并没有将我带到活动,而是带到启动程序(?),是模拟器还是代码?
导航抽屉:
public class NavigationDrawerActivity extends AppCompatActivity { private AppBarConfiguration mAppBarConfiguration; FirebaseDatabase database; DatabaseReference category; TextView txtFullName; RecyclerView recyclerView; RecyclerView.LayoutManager layoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_navigation_drawer); Toolbar toolbar = findViewById(R.id.toolbar); toolbar.setTitle("Options"); setSupportActionBar(toolbar); //Init. Firebase database = FirebaseDatabase.getInstance(); category = database.getReference("Category"); FloatingActionButton fab = findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); DrawerLayout drawer = findViewById(R.id.drawer_layout); NavigationView navigationView = findViewById(R.id.nav_view); // Passing each menu ID as a set of Ids because each // menu should be considered as top level destinations. mAppBarConfiguration = new AppBarConfiguration.Builder( R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow) .setDrawerLayout(drawer) .build(); NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration); NavigationUI.setupWithNavController(navigationView, navController); //Set name for User View HeaderView = navigationView.getHeaderView(0); txtFullName = findViewById(R.id.txtFullName); if (Common.currentUser != null) { txtFullName.setText(Common.currentUser.getName()); finish(); } else if (Common.CurrentFirebaseUser != null) { txtFullName.setText(Common.CurrentFirebaseUser.getDisplayName()); finish(); } //Load Options recyclerView = findViewById(R.id.recycler); recyclerView.setHasFixedSize(true); layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); loadFilter(); } private void loadFilter() { FirebaseRecyclerAdapter<Category,FilterViewHolder> adapter = new FirebaseRecyclerAdapter<Category, FilterViewHolder>(Category.class, R.layout.filter_item, FilterViewHolder.class, category) { @Override protected void populateViewHolder(FilterViewHolder filterViewHolder, Category category, int i) { FilterViewHolder.txtFilterName.setText(category.getName()); Picasso.with(getBaseContext()).load(category.getImage()) .into(filterViewHolder.imageView); Category clickItem = category; filterViewHolder.setItemClickListener(new ItemClickListener() { @Override public void onClick(View view, int position, boolean isLongClick) { Toast.makeText(NavigationDrawerActivity.this, ""+ clickItem.getName(), Toast.LENGTH_SHORT).show(); } }); } }; recyclerView.setAdapter(adapter); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.navigation_drawer, menu); return true; } @Override public boolean onSupportNavigateUp() { NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); return NavigationUI.navigateUp(navController, mAppBarConfiguration) || super.onSupportNavigateUp(); } }
登录到导航抽屉(忽略登录逻辑):
public class SignIn extends AppCompatActivity { private static final int RC_SIGN_IN = 1; Button btnSignIn; ImageView btnGoogle; EditText edtTxtPhone, edtTxtPassword; private static final String TAG = "SignIn"; private FirebaseAuth mAuth; private boolean noError = false; private GoogleSignInClient mGoogleSignInClient; @Override protected void onStart() { super.onStart(); FirebaseUser user = mAuth.getCurrentUser(); if (user != null) { Intent intent = new Intent(SignIn.this, NavigationDrawerActivity.class); startActivity(intent); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sign_in); btnSignIn = findViewById(R.id.btnSignIn); btnGoogle = findViewById(R.id.btnGoogle); edtTxtPhone = findViewById(R.id.edtTxtPhone); edtTxtPassword = findViewById(R.id.edtTxtPassword); //Initialize Firebase FirebaseDatabase database = FirebaseDatabase.getInstance("https://app-delivery-tutorial-default-rtdb.europe-west1.firebasedatabase.app"); DatabaseReference table_user = database.getReference("User"); btnSignIn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { checkCredentials(); ProgressDialog mDialog = new ProgressDialog(SignIn.this); mDialog.setMessage("Signin In..."); mDialog.show(); if (noError) { table_user.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { mDialog.dismiss(); //Check If User Does Exist First if (snapshot.child(edtTxtPhone.getText().toString()).exists()) { //Get User Information User user = snapshot.child(edtTxtPhone.getText().toString()).getValue(User.class); if (user.getPassword().equals(edtTxtPassword.getText().toString())) { Intent successfulLogIn = new Intent(SignIn.this, NavigationDrawerActivity.class); Common.currentUser = user; startActivity(successfulLogIn); } else { Toast.makeText(SignIn.this, "Sign In Failed", Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(SignIn.this, "User Not Found, Please Register First", Toast.LENGTH_SHORT).show(); Log.w(TAG, "Failed to read value."); } } @Override public void onCancelled(@NonNull DatabaseError error) { Toast.makeText(SignIn.this, "Cancelled", Toast.LENGTH_SHORT).show(); } }); } else { mDialog.dismiss(); Toast.makeText(SignIn.this, "Wrong Phone Number Or Password Input", Toast.LENGTH_SHORT).show(); } } }); //Initialize Google Firebase mAuth = FirebaseAuth.getInstance(); createRequestGoogle(); btnGoogle.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { SignInGoogle(); } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_SIGN_IN) { Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); try { GoogleSignInAccount account = task.getResult(ApiException.class); firebaseAuthWithGoogle(account); Toast.makeText(this, "Activity Has Been Succesful", Toast.LENGTH_SHORT).show(); } catch (ApiException e) { Log.w(TAG, "Google Sign In Failed", e); } } } private void firebaseAuthWithGoogle(GoogleSignInAccount account) { AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), null); mAuth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { FirebaseUser user = mAuth.getCurrentUser(); Intent intent = new Intent(SignIn.this, NavigationDrawerActivity.class); Common.CurrentFirebaseUser = user; startActivity(intent); } } }); } private void SignInGoogle() { Intent signInIntent = mGoogleSignInClient.getSignInIntent(); startActivityForResult(signInIntent, RC_SIGN_IN); } private void createRequestGoogle() { GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build(); mGoogleSignInClient = GoogleSignIn.getClient(this, gso); } private void checkCredentials() { String username = edtTxtPhone.getText().toString(); String password = edtTxtPassword.getText().toString(); if (username.isEmpty() || username.length() < 9) { showError(edtTxtPhone, "Your Phone Number must have at least 9 character"); } else if (password.isEmpty() || password.length() < 4) { showError(edtTxtPassword, "Your password must have at least 4 character"); } else { noError = true; } } private void showError(EditText editText, String s) { editText.setError(s); editText.requestFocus(); } }
我试图查看创建的碎片是否是问题所在,NavigationDrawerActivity是否应该使用其他xml文件,或者我是否缺少一些逻辑,但我仍然不明白为什么它会将我带到Launcher Activity而不是NavigationDrawer Activity,SignIn逻辑与NavigationDrawor Activity以外的其他活动一起工作