mvvp mvp mvc

  • content
    {:toc}

三种设计模式的使用以及区别

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()}"
<!--这个是带有view参数的-->
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
  //这个是有view参数的
public void onClickView(View view) {
User user = new User();
user.setAge(10);
user.setName("zhousaito");
getMutableLiveData().setValue(user);
}

//这个是没有view参数的
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
* 变成非静态就报错
* 使用BindingAdapter注解的静态绑定适配器方法允许我们自定义如何调用属性的setter。
* https://blog.csdn.net/guiying712/article/details/80411597
*
* @param imageView
* @param url
*/
@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 的复用

请问做过智能推荐相关吗?

草稿:

王自建
羽良
渠道为王
为了商业职责
阶段匹配问题, 懂产品的老板,其实一样成功
只要有一个长相
不要去刻意去补自己不擅长的东西, 不擅长的东西找别人去做
招人找钱和定战略方向
降维攻击
考虑产品的实用性, 设计师,所有的机器都没孔