#java #android #android-intent
#java #Android #android-намерение
Вопрос:
Вот код для одного из моих Java-классов Android studio:
Button button1; //log in
Button button2; //sign up
public View.OnClickListener button1Listener = new View.OnClickListener() {
public void onClick (View view){
Intent loginActivity = new Intent(getApplicationContext(), LoginActivity.class);
startActivity(loginActivity);
}};
public View.OnClickListener button2Listener = new View.OnClickListener() {
public void onClick (View view){
Intent signupActivity = new Intent(getApplicationContext(), MainActivity.class);
startActivity(signupActivity);
}};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_front_page);
button1 = (Button) findViewById(R.id.button3);
button2 = (Button) findViewById(R.id.button4);
button1.setOnClickListener(button1Listener);
button2.setOnClickListener(button2Listener);
}
Основная активность:
public class MainActivity extends AppCompatActivity {
EditText editText;
EditText editText2;
Button button, button2;
public FirebaseAuth auth;
public FirebaseAuth.AuthStateListener authlistener;
String email, pass;
ProgressBar bar;
public View.OnClickListener buttonListener = new View.OnClickListener() {
public void onClick (View view){
email = editText.getText().toString().trim();
pass = editText2.getText().toString().trim();
createUser();
}};
public View.OnClickListener backButtonListener = new View.OnClickListener() {
public void onClick (View view){
Intent backtoMain = new Intent(getApplicationContext(), FrontPageActivity.class);
startActivity(backtoMain);
}};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText)findViewById(R.id.editText);
editText2 = (EditText)findViewById(R.id.editText2);
button = (Button)findViewById(R.id.button2);
auth = FirebaseAuth.getInstance();
button.setOnClickListener(buttonListener);
bar = (ProgressBar)findViewById(R.id.progressBar2);
bar.setVisibility(View.INVISIBLE);
button2 = (Button)findViewById(R.id.button5);
button2.setOnClickListener(backButtonListener);
}
public void createUser(){
bar.setVisibility(View.VISIBLE);
auth.createUserWithEmailAndPassword(email, pass)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_LONG).show();
bar.setVisibility(View.INVISIBLE);
} else{
Toast.makeText(getApplicationContext(), "Failed, Password must be >=6 characters", Toast.LENGTH_LONG).show();
bar.setVisibility(View.INVISIBLE);
}
}
});
}
}
Активность входа в систему:
public class LoginActivity extends AppCompatActivity {
EditText editText;
EditText editText2;
Button button;
public FirebaseAuth Auth = FirebaseAuth.getInstance();
public FirebaseAuth.AuthStateListener authlistener;
String email, pass;
ProgressBar bar;
public View.OnClickListener buttonListener = new View.OnClickListener() {
public void onClick (View view){
email = editText.getText().toString().trim();
pass = editText2.getText().toString().trim();
logInUser();
}};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText)findViewById(R.id.editText);
editText2 = (EditText)findViewById(R.id.editText2);
button = (Button)findViewById(R.id.button2);
Auth = FirebaseAuth.getInstance();
button.setOnClickListener(buttonListener);
bar = (ProgressBar)findViewById(R.id.progressBar2);
bar.setVisibility(View.INVISIBLE);
authlistener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
} else {
// User is signed out
}
// ...
}
};
// ...
}
@Override
public void onStart() {
super.onStart();
Auth.addAuthStateListener(authlistener);
}
@Override
public void onStop() {
super.onStop();
if (authlistener != null) {
Auth.removeAuthStateListener(authlistener);
}
}
public void logInUser(){
bar.setVisibility(View.VISIBLE);
Auth.signInWithEmailAndPassword(email, pass)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()) {
Intent loggedInActivity = new Intent(getApplicationContext(), Loggedin.class);
startActivity(loggedInActivity);
}
else{
Toast.makeText(getApplicationContext(), "There was an error, try again", Toast.LENGTH_SHORT).show();
}
}
});
}
}
Итак, у меня есть 2 кнопки: «вход» и «регистрация», и обе должны приводить к разным намерениям. sign-up
Ведет к mainactivity.class
тому, что в основном является страницей регистрации.
Однако, несмотря на то, что я сопоставил button1
класс loginAcitivty, он все равно переходит к MainActivity.class
. Почему это происходит?
Комментарии:
1. показать остальную часть кода
2. Может быть, обе кнопки имеют одинаковый набор прослушивателей?
3. Убедитесь, что кнопки не имеют одинакового прослушивателя
4. @AdamVarhegyi, они этого не делают, я обновил код.
5. @PavneetSingh, я добавил слушателя и все остальные классы тоже
Ответ №1:
Проверьте LoginActivity
, что вы установили setContentView(R.layout.activity_main);
, что это раздувает макет содержимого activity_main
Макет, который вы раздуваете в обоих действиях, одинаков..
Комментарии:
1. Еще одна причина правильно назвать элемент в макетах. Это вызвало бы триггер и исключение во время findView
2. Это потому, что он не может найти идентификатор, проверьте идентификатор, существует ли он в макете или нет….
3. Наоборот … все идентификаторы присутствуют в обоих макетах, потому что они являются name
button
,editText
,editText2
, … так что все работает отлично, за исключением того, что он работает не на том экране. Вот почему он думал, что его намерение движется в неправильном направлении. Исключений не было.
Ответ №2:
измените свой код следующим образом,
Button button1; //log in
Button button2; //sign up
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent loginActivity = new Intent(getApplicationContext(), LoginActivity.class);
startActivity(loginActivity);
}};
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent signupActivity = new Intent(getApplicationContext(), MainActivity.class);
startActivity(signupActivity);
}};
Комментарии:
1. Я могу это сделать, но почему у моего способа есть проблема?
2. проблема с вашими слушателями, и в вашем коде вы не находите представление для прослушивания.
3. @KiranDsouza не находит представление? Кнопка? Тогда хорошо
.setOnClickListener
было бы создать исключение…4. вам нужен объект View макета и вызовите для него findViewById()