56

Android Databindingに関する Yigit Boyar と George Mount の講演TextWatcherでは、 にバインドするのがいかに簡単かを説明していますonTextChanged(13:41)。ボタンで。彼らのスライドは間違っていますか?まず、ビューにはプロパティButtonがありません。onTextChangedどちらもsetOnTextChangedメソッドを持っていません。どちらもありませんEditText。しかし、どちらもaddTextChangedListenerwhich をTextWatcher入力として受け取ります。

それで、彼らは何について話しているのですか?どうやってやっているの?サンプル コードはコンパイルされませんが、次のエラーが発生します。

Error:(17) No resource identifier found for attribute 'onTextChanged' in package 'android'

Android Databinding フレームワークを使用して、ビュー、特に EditText の「テキスト変更イベント」にバインドするにはどうすればよいですか?

4

10 に答える 10

105

実際、それは箱から出してすぐに動作します。私の間違いは、古いバージョンのデータ バインディング フレームワークを使用していたことだと思います。最新のものを使用すると、次の手順になります。

意見:

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/username"
    android:text="Enter username:"
    android:onTextChanged="@{data.onTextChanged}" />

モデル:

public void onTextChanged(CharSequence s, int start, int before, int count) {
    Log.w("tag", "onTextChanged " + s);
}

モデルDataBindingに割り当てたことも確認してください

たとえば。あなたの活動で

lateinit var activityMainDataBinding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    activityMainDataBinding = DataBindingUtil.setContentView(this, R.layout.activity_main) 
    val dataViewModel = ViewModelProvider(this).get(DataViewModel::class.java)
    activityMainDataBinding.dataModel = dataViewModel
}

gradle ビルド ツール v1.5.0 以降を参照してandroid.dataBinding.enabled trueおり、build.gradle でデータ バインディングが有効になっていることを確認してください。

編集:ここでデモプロジェクトを機能させます。ビューモデル

于 2015-11-21T09:30:22.700 に答える
5

このメソッドを使用して Android databinding.1st のテキスト変更リスナーを処理し、ViewModelクラスでLiveData変数を作成し、LiveData オブジェクトを返す getText メソッドも作成します

  • public MutableLiveData<String> verifyCodes = new MutableLiveData<>();
  • public LiveData<String> getCodes(){ return verifyCodes; }

次に、xml ファイルでeditTextフィールドにテキストバインドの属性を設定し、上記の liveData フィールドを使用します。

  • <EditText android:id="@+id/et_verification1st" android:layout_width="match_parent" android:layout_height="match_parent" android:text="@={viewModel.verifyCodes}"/>

データバインディングでは、データタグ内にviewModelクラスの変数を作成する方法をすでに知っています。例として

  • <data> <variable name="viewModel" type="viewModel.VerifyUserActivityViewModel" /> </data>

さて、あなたのアクティビティは、 viewModel クラス内で作成した liveData オブジェクトを観察する必要があります

  • mViewModel.getCodes().observe(this,new Observer< String>(){ @Override public void onChange(String strings){ log.d("OnChange",strings); }});

onChangeメソッド内でテキストが変更されると、任意のロジックを実行できます

于 2020-04-27T06:13:50.673 に答える