.GONE и .VISIBLE сбрасывается при переворачивании телефона - PullRequest
0 голосов
/ 01 мая 2020

Я сделал две кнопки, одна видна, а другая скрыта. При нажатии на видимую кнопку она исчезает, а другая становится видимой (это работает), однако, когда я переворачиваю телефон в сторону (альбомный режим), все «сбрасывается», поэтому мне нужно снова нажать кнопку, чтобы сделать ее невидимой и другой видимый, , это не то, что я хочу , действие должно быть таким же, однако у меня телефон "прямой" или "перевернутый". Как это решается проще всего?

                    Button mButton = (Button)findViewById(R.id.button1);
    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Button butt1 = (Button) findViewById(R.id.button1);
            butt1.setVisibility(View.GONE);
            Button butt2 = (Button) findViewById(R.id.button2)  ;
            butt2.setVisibility(View.VISIBLE);
        }
    });

Ответы [ 2 ]

0 голосов

То, что вам нужно, - это возможность сохранить состояние кнопок в другом месте. Я могу назвать два, которые вы можете использовать: 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.

0 голосов
/ 01 мая 2020

Когда вы поворачиваете свой телефон, действие уничтожается и воссоздается. Вам необходимо сохранить информацию о состоянии в переменной класса, например, путем переопределения onStop, а затем прочитать эту информацию в ваших onCreate или onResume методах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...