Здравствуйте! У меня возникла проблема: когда я добавляю в код строку `<br/> driverRegBtn.setVisibility(View.INVISIBLE);`, приложение вылетает при переходе в этот активити. Я перепробовал множество вариантов, но не могу понять, в чем конкретно ошибка. Хотелось бы получить вашу помощь.
Вот код активити:
<pre><code class="java">package com.example.a9station;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
public class DriverRegLoginActivity extends AppCompatActivity {
Button signInBtn, driverRegBtn;
TextView statusDriver, quest;
EditText driverEmail, driverPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
driverRegBtn = findViewById(R.id.driverReg);
quest = findViewById(R.id.quest);
driverEmail = findViewById(R.id.driverEmail);
driverPassword = findViewById(R.id.driverPassword);
signInBtn = findViewById(R.id.signIn);
statusDriver = findViewById(R.id.statusDriver);
driverRegBtn.setVisibility(View.INVISIBLE);
//driverRegBtn.setEnabled(false);
/* quest.setOnClickListener(v ->
{
driverRegBtn.setVisibility(View.VISIBLE);
driverRegBtn.setEnabled(true);
signInBtn.setVisibility(View.INVISIBLE);
Здравствуйте! Ошибка, с которой вы сталкиваетесь, возникает из-за того, что вы пытаетесь вызвать метод `setVisibility(int)` на объекте `driverRegBtn`, который равен `null`. Это происходит потому, что перед вызовом метода вы не инициализировали `driverRegBtn` с помощью `findViewById`.
Проблема может заключаться в том, что вы вызываете `findViewById` до того, как привязали макет вашего активити. Вам необходимо убедиться, что вы установили макет с помощью метода `setContentView()` перед вызовом `findViewById()` для получения ссылок на элементы интерфейса.
Вот шаги, которые нужно предпринять для решения проблемы:
1. Убедитесь, что в вашем проекте существует XML-макет, содержащий элемент `Button` с идентификатором `driverReg`.
2. Перед вызовом `findViewById()` вызовите `setContentView()` с вашим макетом.
Ваш код должен выглядеть примерно так:
```java
package com.example.a9station;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class DriverRegLoginActivity extends AppCompatActivity {
Button signInBtn, driverRegBtn;
TextView statusDriver, quest;
EditText driverEmail, driverPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Устанавливаем макет для активити
setContentView(R.layout.activity_driver_reg_login); // Укажите ваш XML-файл макета
// Инициализируем элементы интерфейса
driverRegBtn = findViewById(R.id.driverReg);
quest = findViewById(R.id.quest);
driverEmail = findViewById(R.id.driverEmail);
driverPassword = findViewById(R.id.driverPassword);
signInBtn = findViewById(R.id.signIn);
statusDriver = findViewById(R.id.statusDriver);
// Устанавливаем видимость кнопки
driverRegBtn.setVisibility(View.INVISIBLE);
// Остальной код...
}
}
```
Не забудьте заменить `R.layout.activity_driver_reg_login` на имя вашего XML-файла макета, если оно у вас другое. Также убедитесь, что идентификаторы всех элементов в XML-файле совпадают с теми, что вы используете в Java-коде.
После этих изменений ошибка должна исчезнуть. Если она все равно появляется, проверьте лог (Logcat) на предмет дополнительных сообщений об ошибках или предупреждений.
Ошибка возникает из-за того, что вы пытаетесь получить доступ к элементам интерфейса через findViewById() до установки макета активности с помощью setContentView(). В результате переменные driverRegBtn, quest и другие остаются null, и попытка вызвать методы на этих объектах приводит к крашу.
Исправьте порядок вызовов в onCreate():
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 1. Сначала устанавливаем макет setContentView(R.layout.activity_driver_reg_login); // 2. Теперь инициализируем элементы интерфейса driverRegBtn = findViewById(R.id.driverReg); quest = findViewById(R.id.quest); driverEmail = findViewById(R.id.driverEmail); driverPassword = findViewById(R.id.driverPassword); signInBtn = findViewById(R.id.signIn); statusDriver = findViewById(R.id.statusDriver); // 3. Теперь можем работать с элементами driverRegBtn.setVisibility(View.INVISIBLE); // Остальной код (EdgeToEdge и т.д.) EdgeToEdge.enable(this); ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); }
Убедитесь, что в вашем XML есть все указанные элементы с правильными android:id.
Для элементов, которые могут быть скрыты/показаны, проверьте начальное состояние видимости в XML (например, android:visibility).
Используйте аннотацию @Nullable или @NonNull для переменных представлений, чтобы получить подсказки от Android Studio.