Android Обязательный DataBindingComponent имеет значение null, когда я пытаюсь реализовать EditText TextWatcher - PullRequest
0 голосов
/ 22 марта 2019

Я только что узнал о привязке данных в приложениях для Android и хочу реализовать EditText TextWatcher с @BindingAdapter, для моего кода ниже, к сожалению, я получаю эту ошибку:

Required DataBindingComponent is null in class ActivityLoginBindingImpl. A BindingAdapter in ir.instacheeta.application.views.login.viewModel.LoginViewModel.EditTextBindingAdapters is not static and requires an object to use, retrieved from the DataBindingComponent. If you don't use an inflation method taking a DataBindingComponent, use DataBindingUtil.setDefaultComponent or make all BindingAdapter methods static.

, и я не могу разрешитьчто

binding = DataBindingUtil.setContentView(this, R.layout.activity_login);
binding.setViewModel(ViewModelProviders.of(this,
        new LoginViewModelFactory(this))
        .get(LoginViewModel.class));

Мой ViewModel класс:

public class LoginViewModel extends ObservableViewModel {
    private static InstagramAccount instagramAccount;
    private LoginResultCallback loginResultCallback;

    public LoginViewModel(LoginResultCallback callback) {
        instagramAccount = new InstagramAccount();
        loginResultCallback = callback;
    }

    public static class EditTextBindingAdapters {

        @BindingAdapter(value = "textChangedListener" , requireAll = true)
        public void bindTextWatcher(EditText editText, TextWatcher textWatcher) {
            editText.addTextChangedListener(textWatcher);
        }
    }

    @Bindable
    public static TextWatcher getUserPageTextWatcher() {
        return new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                // Do nothing.
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                Log.e("==> ", s.toString());
                instagramAccount.setUserPage(s.toString());
            }

            @Override
            public void afterTextChanged(Editable s) {
                // Do nothing.
            }
        };
    }

    @Bindable
    public static TextWatcher getUserPagePassword() {
        return new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                Log.e("==> ", s.toString());
                instagramAccount.setUserPassword(s.toString());
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        };
    }
}

, а мой ObservableViewModel класс:

open class ObservableViewModel : ViewModel(), Observable {

    private val callbacks: PropertyChangeRegistry by lazy { PropertyChangeRegistry() }

    override fun addOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback) {
        callbacks.add(callback)
    }

    override fun removeOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback) {
        callbacks.remove(callback)
    }

    fun notifyChange() {
        callbacks.notifyCallbacks(this, 0, null)
    }

    fun notifyPropertyChanged(fieldId: Int) {
        callbacks.notifyCallbacks(this, fieldId, null)
    }
}
...