Данные не обновляются в примере привязки данных в модели MVVM - Обновление данных в и из модели - PullRequest
0 голосов
/ 08 января 2020

Я пытался реализовать двустороннюю привязку данных в простом коде 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>
...