【发布时间】:2020-09-11 17:44:42
【问题描述】:
我有一个显示一个文本视图的活动:
<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="Users"
type="com.example.mvvm.model.UserInfoModel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".view.MainActivity">
<TextView
android:id="@+id/tv_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="50dp"
android:text="@{Users.name,default = hello}"/>
</LinearLayout>
</layout>
还有我的 UserInfoModel 类:
public class UserInfoModel {
private String name;
public UserInfoModel() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
在我的活动中:
public class MainActivity extends AppCompatActivity {
ActivityMainBinding binding;
UserInfoModel users;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
textView = binding.tvMain;
users = new UserInfoModel();
users.setName("Stack");
viewAction();
binding.setLifecycleOwner(this);
binding.setUsers(users);
}
}
我的问题是,当我在 viewAction 方法中更改 name 时:
private void viewAction() {
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
users.setName("Change Text");
}
});
}
我的 UI 没有改变,文本视图仍然显示 Stack。我尝试使用binding.notifyPropertyChanged(id),但它不影响。我的错误在哪里?如何更改数据?
感谢您的关注。
【问题讨论】:
-
模型更改后是否再次尝试调用 setUsers?
-
@JohnyDeph 有必要吗?它不应该改变生活吗?
-
只有当你使用下面的答案时它才会改变。或者你需要使用我的方法。此外,最好使用视图模型模式中的实时数据来动态更新 ui))
-
其实我不喜欢下面的解决方案,因为你的模型变得更脏了
-
@JohnyDeph 能给我看个样本好吗?
标签: android data-binding