То, что вам нужно, - это возможность сохранить состояние кнопок в другом месте. Я могу назвать два, которые вы можете использовать: SharedPreferences или ViewModel .
В вашем случае я предлагаю создать класс ViewModel
, который будет хранить состояние вашего кнопки.
CustomViewModel class
import androidx.lifecycle.ViewModel;
public class CustomViewModel extends ViewModel {
public boolean button1_gone;
}
Тогда в вашей деятельности:
final CustomViewModel model = new ViewModelProvider(this).get(CustomViewModel.class);
if (model.button1_gone) {
Button butt1 = findViewById(R.id.button1); // I know that butt1 is redundant here
butt1.setVisibility(View.GONE);
Button butt2 = findViewById(R.id.button2);
butt2.setVisibility(View.VISIBLE);
model.button1_gone = true;
}
Button mButton = findViewById(R.id.button1);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Button butt1 = findViewById(R.id.button1);
butt1.setVisibility(View.GONE);
Button butt2 = findViewById(R.id.button2);
butt2.setVisibility(View.VISIBLE);
model.button1_gone = true;
}
});
Также не забудьте добавить эти зависимости в gradle вашего приложения (с app
, а не с именем вашего проекта):
def lifecycle_version = "2.2.0"
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
Примечание: вам нужно добавить эти зависимости, иначе вы не получите правильный конструктор для ViewModelProvider
, который принимает только один аргумент.
Чтобы узнать больше о ViewModel
, go здесь: https://developer.android.com/topic/libraries/architecture/viewmodel
ВАЖНО: Никогда не объявляйте переменные контроллеров пользовательского интерфейса внутри вашего ViewModel
, так как это приведет к утечкам памяти. Контроллерами пользовательского интерфейса являются TextView
, Button
, et c.