mvvm - android - using dataBinding, on Activity instead of layout -
i working in mvvm design pattern. want use databinding or rxjava in order notify view when model has changed. databinding can inside xml. want notify activity on change in model , more complicated. let's assume want textview change color when text in not empty. can me via databinding or rxjava ?
here code:
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> activity
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);         }     } 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);     }  } 
what can create callback mechanism trigger method in activity. still notify viewmodel first, effect same.
you can create new interface (or add inside viewmodel)
public interface viewmodelcallback{    void actioncallback(); } in activity:
public class mainactivity extends appcompatactivity implements viewmodelcallback in viewmodel
private arraylist<viewmodelcallback> callbacks = new arraylist<>();  public void notifycallbacks(){   for(viewmodelcallback c : callbacks){      if(c != null){          c.actioncallback       }    } }  public void addcallback(viewmodelcallback c){      callbacks.add(c); } call notifycallback after notifypropertychanged(). , don't forget add activity callback in oncreate
viewmodel.addcallback(this) you should remove in ondestroy.
Comments
Post a Comment