Я пытался реализовать двустороннюю привязку данных в простом коде MVVM ниже. Он отображает «Алекс» как его жестко закодированный со строкой «Алекс» в текстовом представлении, позже я изменил вид редактирования со строкой «Ramone». Но изменение в editview не было отражено в textview. Я поделился кодом ниже, пожалуйста, помогите исправить то же самое.
Обновлено:
public void setTextMsg(String text){
db.setTextMsgModel(text);
this.price = text;
notifyPropertyChanged(BR.ViewModel);
}
@Bindable
public String getTextMsg(){
return db.getTextMsgModel();
}
ListViewModel:
package com.example.newmvvm.listviewmodel;
import androidx.databinding.BaseObservable;
import androidx.databinding.Bindable;
import androidx.lifecycle.ViewModel;
import com.example.newmvvm.BR;
import com.example.newmvvm.Model.DB;
public class ListViewModel extends BaseObservable {
DB db;
String price;
public ListViewModel(){
db = new DB("Alex");
}
public void setTextMsg(String text){
db.setTextMsgModel(text);
this.price = text;
notifyPropertyChanged(BR.ViewModel);
}
@Bindable
public String getTextMsg(){
return db.getTextMsgModel();
}
}
БД:
package com.example.newmvvm.Model;
public class DB {
private String textMsgModel = null;
public DB(String text){
this.textMsgModel = text;
}
public void setTextMsgModel(String text){
this.textMsgModel = text;
//return text;
}
public String getTextMsgModel(){
return this.textMsgModel;
}
}
MainActivity:
package com.example.newmvvm.View;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.ViewModelProviders;
import android.os.Bundle;
import com.example.newmvvm.listviewmodel.ListViewModel;
import com.example.newmvvm.R;
import com.example.newmvvm.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main);
activityMainBinding.setViewModel(new ListViewModel());
//ListViewModel viewModel = ViewModelProviders.of(this).get(ListViewModel.class);
}
}
activity_main. xml:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" >
<data>
<variable
name="ViewModel"
type="com.example.newmvvm.listviewmodel.ListViewModel"
/>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".View.MainActivity">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:text="@={ViewModel.TextMsg}" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText"
android:text="Click Me" />
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{ViewModel.TextMsg}" />
</LinearLayout>
</layout>