Я работаю в шаблоне проектирования MVVM. Я хочу использовать dataBinding или RXJava, чтобы уведомлять представление об изменении модели. dataBinding может сделать это внутри xml. но я хочу уведомить Activity об изменении модели и сделать что-то более сложное. предположим, я хочу, чтобы мой TextView менял цвет, когда текст не пуст. Вы можете помочь мне сделать это через dataBinding или RXJava?
вот мой код:
XML
<?xml version="1.0" encoding="utf-8"?>
<data>
<variable
name="viewModel"
type="edi.com.mydatabindingsimple.MyViewModel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:text="@={viewModel.txt}" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@={viewModel.txt}" />
</LinearLayout>
Мероприятия
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import edi.com.mydatabindingsimple.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
MyViewModel viewModel = new MyViewModel();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setViewModel(viewModel);
}
}
видМодель
import android.databinding.BaseObservable;
import android.databinding.Bindable;
public class MyViewModel extends BaseObservable{
private String txt;
@Bindable
public String getTxt() {
return txt;
}
public void setTxt(String txt) {
this.txt = txt;
notifyPropertyChanged(edi.com.mydatabindingsimple.BR.txt);
}
}
@BindingAdapter
, чтобы добавить свою собственную - person Blackbelt   schedule 28.03.2017android:background="@{viewModel.textViewColor}"
в свой<TextView>
и добавьте метод@Bindable int getTextViewColor()
вMyViewModel
- person pskink   schedule 29.03.2017android:text
), а некоторые (например,android:background
) через активность? имеет ли это смысл? но, конечно, вы все еще можете вызыватьviewModel.addOnPropertyChangedCallback(...)
внутриMainActivity#onCreate
, поэтому теперь, когда ваш текст изменяется, обратный вызов вызывается в вашей деятельности, но... после добавления обратного вызова ваша модель представления имеет ссылку на действие. это то, чего вы хотели бы избежать... - person pskink   schedule 30.03.2017EditText
в зависимости от его длины), вы можете сделать это, просто предоставив некоторые обратные вызовы в вашей деятельности (например,TextWatcher
) , но если это должно зависеть от данных модели, необходимо сделать некоторую ссылку на Activty - person pskink   schedule 30.03.2017