三种设计模式的使用以及区别 mvc -> mvp -> mvvm
1 2 3 aac框架,mvvm的框架(需要梯子) https://developer.android.google.cn/jetpack/docs/guide https://developer.android.google.cn/topic/libraries/architecture/index.html
一. mvvm mvvm主要是要通过databinding来进行xml布局中进行绑定
databinding的赋值:
1 2 3 4 5 6 7 8 9 10 11 12 13 <data > <import type ="com.zhousaito.mvvmdemo.entity.User" /> <import type ="com.zhousaito.mvvmdemo.viewmodel.UserViewModel" /> <variable name ="user" type ="User" /> <variable name ="viewModel" type ="UserViewModel" /> </data >
1 2 3 4 5 6 7 8 9 10 11 12 <data > <variable name ="user" type ="com.zhousaito.mvvmreview.entry.User" /> <variable name ="mainViewModel" type ="com.zhousaito.mvvmreview.viewmodel.MainViewModel" /> </data >
通过@{user.name} 来进行使用
1 2 3 4 <TextView android:layout_width ="wrap_content" android:layout_height ="wrap_content" android:text ="@{user.name}" />
1 2 3 4 error: Bindable must be on a member in an Observable class //需要user 去继承BaseObservable class User extends BaseObservable
databinding的点击事件的写法:
1 2 3 4 5 6 7 8 android:onClick="@{() -> viewModel.onClickView()}" android:onClick="@{viewModel::onClickView}" android:onClick="@{(v) -> viewModel.onClickView(v)}"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public void onClickView (View view) { User user = new User(); user.setAge(10 ); user.setName("zhousaito" ); getMutableLiveData().setValue(user); } public void onClickView () { User user = new User(); user.setAge(10 ); user.setName("zhousaito" ); getMutableLiveData().setValue(user); }
如果user类不实现
如果你的Entity不想继承BaseObservable 以及做上述的那些操作,你也可以使用ObservableFields。 android.databinding.ObservableField android.databinding.ObservableBoolean, android.databinding.ObservableByte, android.databinding.ObservableChar, android.databinding.ObservableShort, android.databinding.ObservableInt, android.databinding.ObservableLong, android.databinding.ObservableFloat, android.databinding.ObservableDouble, android.databinding.ObservableParcelable. ObservableFields
链接:https://www.jianshu.com/p/e7628d6e6f61/
1 2 3 4 5 6 7 8 9 public class User { public ObservableField<String> name = new ObservableField<>(); public ObservableField<Integer> age = new ObservableField<>(); } mUser.age.set(10 ); mUser.name.set("zhousaito" );
1 2 3 4 5 6 7 8 9 10 11 12 13 14 @BindingAdapter ("setUrl" ) public static void setUrl (ImageView imageView, String url) { Log.e(TAG, "setUrl: " + url); }
1 android:background="@{dataViewModel.error? @color/colorAccent: @color/colorPrimary}"
1.布局是databinding的吗,
View 的复用
请问做过智能推荐相关吗?
草稿:
王自建 羽良 渠道为王 为了商业职责 阶段匹配问题, 懂产品的老板,其实一样成功 只要有一个长相 不要去刻意去补自己不擅长的东西, 不擅长的东西找别人去做 招人找钱和定战略方向 降维攻击 考虑产品的实用性, 设计师,所有的机器都没孔