У меня проблемы при попытке сделать двустороннюю привязку данных с моим классом Editor (в модели).Этот объект расширяет View и вызывается прямо в макете.Проблема в том, как мне добиться двухстороннего связывания данных, чтобы при изменении редактора в EditionViewModel оно также менялось в представлении?(Мой классный редактор представляет Canvas, на котором можно рисовать)
Вот мой код EditionViewModel:
public class EditionViewModel extends ViewModel {
private Editor editor;
private User user;
private SocketService socketService;
private EditionErrorHandler editionErrorHandler;
public EditionViewModel(User user, SocketService socketService, EditionErrorHandler editionErrorHandler, Editor editor) {
this.user = user;
this.socketService = socketService;
this.editionErrorHandler = editionErrorHandler;
this.editor = editor;
}
public Editor getEditor() {
return editor;
}
public void setEditor(Editor editor) {
this.editor = editor;
}
public void onPenClicked(View view){
editor.normal();
}
public void onPenEraserClicked(View view){
editor.eraser();
}
Вот EditionActivity:
public class EditionActivity extends AppCompatActivity implements EditionErrorHandler {
private Editor edition;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityEditionBinding activityEditionBinding = DataBindingUtil.setContentView(this, R.layout.activity_edition);
edition = (Editor) findViewById(R.id.edition);
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
edition.init(metrics);
activityEditionBinding.setViewModel(ViewModelProviders.of(
this,
new EditionViewModelFactory(null, null, this, edition))
.get(EditionViewModel.class));
}
И, наконец, здесьэто макет edition_activity:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewModel"
type="ca.polymtl.equipe5.polypaint.viewmodel.EditionViewModel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="ca.polymtl.equipe5.polypaint.view.EditionActivity"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:background="#aea1a1">
<Button
android:layout_width="50dp"
android:layout_height="50dp"
android:drawableTop="@drawable/crayon"
android:onClick="@{viewModel::onPenClicked}" />
</LinearLayout>
<ca.polymtl.equipe5.polypaint.model.Editor
android:id="@+id/edition"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<!--android:src="@={viewModel.Editor}"-->
/>
</LinearLayout>
Интересная часть находится в ca.polymtl.equipe5.polypaint.model.Editor TAG.На этом этапе, как я могу добиться двухсторонней привязки данных, чтобы мой объект Editor был таким же, как объект Editor EditionViewModel?(Я сделал неудачную попытку с android: src = "@ = {viewModel.Editor}" и, найдя редактор, напрямую используя его идентификатор в Edition_Activity)
Спасибо за любую помощь, которую вы можете предоставить.