0

Я использую привязки данных библиотеки и я получил его так для, но есть вопросы, которые я cant't кажется get.For стартеровпривязка данных не работает Android

Это часть моего макета XML activity_login. XML

<data> 

    <variable 
     name="viewModel" 
     type="com.ViewModel.LoginViewModel" /> 

</data> 
<EditText 
       android:id="@+id/edit_text_username_register" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="@string/username" 
       android:imeOptions="actionNext" 
       android:inputType="text" 
       android:textSize="15sp" 
       android:theme="@style/EditTextTheme" 
       app:addTextChangedListener="@{viewModel.getUsername}" /> 

И мой ViewModel содержит

public TextWatcher getUsername() { 
    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.i("username", s.toString()); 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }; 
} 

выше код для извлечения имени пользователя, как пользователь types.Is, что правильный способ использования привязки или данных я делаю неправильно? Вышеуказанный код работает отлично. Проблема заключается в том, когда я пытаюсь сделать это так, как я нашел в Интернете, что является добавление

android:addTextChangedListener="@{viewModel.getUsername}" 

это не работает, и я получаю предупреждение о том, неизвестный атрибут, и если я пытаюсь компиляции я получаю привязки делает не существует ошибки. Я также использую радиогруппу, содержащую 2 переключателя, и я хотел бы выбрать, какой из них был выбран с использованием databinding.I нашел онлайн-источники, которые используют android: onCheckedChanged, который я пытался использовать, но я снова получаю сообщение об ошибке существует и неизвестный атрибут

+0

сообщения вашей ошибки, а также. Особенно в той части, где говорится * неизвестный атрибут *. Возможно, вместо этого используется только 'viewModel.username'. – tynn

ответ

0

InverseBindingMethod это хороший материал, следуя примеру.

класс

public class Handlers { 
    public void onKeywordChanged(CharSequence s, int start, int before, int count) { 
      // Your code here 
    } 
} 

раскладка

<layout> 
    <data> 
     <variable name="handlers" 
      type="my.package.Handlers" /> 
    </data> 

    ... 
    <EditText 
     ... 
     android:onTextChanged="@{handlers::onKeywordChanged}" 
    /> 
</layout> 

Для получения дополнительной информации https://developer.android.com/reference/android/databinding/InverseBindingMethod.html

Смежные вопросы