私はデータバインディングで経験しています。POJO(ユーザー)を拡張BaseObservable
することで、レイアウト内のリンクされた要素を更新できることはわかっていますが、プロパティの変更で別のスタッフを実行することに興味がありますandroid:text="@={user.name}"
。たとえば、何らかのロジックを適用したり、トースト メッセージを表示したりします。メソッドのようなものだと思ってliveDataObject.observe()
いましたが、プロパティが変更されても反応しません。これが私のコードです:
ビューモデル:
public class MainViewModel extends ViewModel {
private MutableLiveData<User> user; //getter and setter
モデル:
public class User extends BaseObservable {
private String name;
public User() {}
@Bindable
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
notifyPropertyChanged(BR.name);
}
}
断片:
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
mDataBinding = DataBindingUtil.inflate(getLayoutInflater(), R.layout.main_fragment, container, false);
mDataBinding.setLifecycleOwner(this);
return mDataBinding.getRoot();
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mViewModel = new ViewModelProvider(getActivity()).get(MainViewModel.class);
mViewModel.getUser().observe(getViewLifecycleOwner(), user ->
Toast.makeText(getActivity().getApplicationContext(), user.getName(), Toast.LENGTH_SHORT).show()
);
}