Здравствуйте! У меня возникла проблема: когда я добавляю в код строку `<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.