Тост отображается каждый раз, когда устройство вращается - PullRequest
0 голосов
/ 03 марта 2019

В моем приложении для Android я использую AAC.

Здесь моя активность:

public class AddTraderActivity extends AppCompatActivity {
    AddTraderViewModel addTraderViewModel;
    private static final String TAG = AddTraderActivity.class.getName();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AddTraderActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.add_trader_activity);
        binding.setHandler(this);
        init();
    }

    private void init() {
        ViewModelProvider viewViewModelProvider = ViewModelProviders.of(this);
        addTraderViewModel = viewViewModelProvider.get(AddTraderViewModel.class);
        Observer<String> () {

            @Override
            public void onChanged (String message){
                Debug.d(TAG, "onChanged: message = " + message);
                Toast.makeText(AddTraderActivity.this, message, Toast.LENGTH_LONG).show();
            }
        });
    }

    public void onClickStart() {
        EditText baseEditText = findViewById(R.id.baseEditText);
        EditText quoteEditText = findViewById(R.id.quoteEditText);
        addTraderViewModel.doClickStart(baseEditText.getText().toString(), quoteEditText.getText().toString());
    }
}

Здесь моя ViewModel:

public class AddTraderViewModel extends AndroidViewModel {
    private MutableLiveData<String> messageLiveData = new MutableLiveData<>();

    private static final String TAG = AddTraderViewModel.class.getName();

    public AddTraderViewModel(@NonNull Application application) {
        super(application);
    }

    public void doClickStart(String base, String quote) {
        Debug.d(TAG, "doClickStart: ");
        if (base.trim().isEmpty() || quote.trim().isEmpty()) {
            String message = getApplication().getApplicationContext().getString(R.string.please_input_all_fields);
            messageLiveData.setValue(message);
            return;
        }
    }

    public LiveData<String> getMessageLiveData() {
        return messageLiveData;
    }
}

Поэтому, когда я нажимаю на кнопку наМетод вызова действия onClickStart() Если какие-либо поля пусты, показывать тост.В упражнении вызов метода:

onChanged (String message)

Приятно.Это нормально работает.

Но проблема в том, что, когда я поворачиваю устройство в методе активности, onChanged(String message) называется СНОВА , и в результате показывается тост.Это происходило при каждом повороте.Почему?

1 Ответ

0 голосов
/ 05 марта 2019

Это ожидаемое поведение.Если вы хотите избежать этого, вы должны установить message = "" и оставить пустой чек, прежде чем показывать тост.

Лучший способ использовать это что-то вроде Event Wrapper или SingleLiveEvent

Настоятельно рекомендуем прочитать эту статью .Это объясняет, почему вы сталкиваетесь с этим, и каковы ваши варианты подробно.

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