Android mvvm livedata and databinding
I am experimenting the new architecture components from Google trying to achieve more reactive code using ViewModel
, LiveData
and DataBinding
.
Basically my idea around ViewModel
is to have only one field of type Model
(user for the record since we are representing a user profile scree). So my ViewModel
class is :
class ViewModel : ViewModel() {
var model = MutableLiveData<User>()
and my Model
class is :
class User(var name: String, var lastName: String, var age: Int)
In my layout file, I am trying to bind the fields on my Model
into the view using DataBinding
plugin. The problem is that since my ViewModel
has a MutableLiveData<User>
I can't access (from xml binding) the fields inside the User
class (name, lastName...).
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="viewModel"
type="com.github.andromedcodes.mvvmtutorial.ViewModel" />
</data>
<RelativeLayout xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:text="@{viewModel.user.name}"/>
</RelativeLayout>
</layout>
Is it even possible to do that? And which is better, having a ViewModel
with separate Fields (String, Int, Whatever...) or re-using a Model
?
android mvvm android-databinding android-architecture-components android-livedata
|
show 4 more comments
I am experimenting the new architecture components from Google trying to achieve more reactive code using ViewModel
, LiveData
and DataBinding
.
Basically my idea around ViewModel
is to have only one field of type Model
(user for the record since we are representing a user profile scree). So my ViewModel
class is :
class ViewModel : ViewModel() {
var model = MutableLiveData<User>()
and my Model
class is :
class User(var name: String, var lastName: String, var age: Int)
In my layout file, I am trying to bind the fields on my Model
into the view using DataBinding
plugin. The problem is that since my ViewModel
has a MutableLiveData<User>
I can't access (from xml binding) the fields inside the User
class (name, lastName...).
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="viewModel"
type="com.github.andromedcodes.mvvmtutorial.ViewModel" />
</data>
<RelativeLayout xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:text="@{viewModel.user.name}"/>
</RelativeLayout>
</layout>
Is it even possible to do that? And which is better, having a ViewModel
with separate Fields (String, Int, Whatever...) or re-using a Model
?
android mvvm android-databinding android-architecture-components android-livedata
you should be able to access those fields on your xml layout. are you getting any errors?
– takecare
Nov 23 at 0:02
Yes i get a data accessor error when i write something like android:text="@{viewModel.user.name}"
– mohamed aouled issa
Nov 23 at 0:04
can you paste your xml layout here? are you declaring your viewmodel under the <data> element?
– takecare
Nov 23 at 0:10
Absolutely! all the variables are under <data> tag. I will edit my post with my xml layout.
– mohamed aouled issa
Nov 23 at 0:12
2
from your view model code, i think you should haveandroid:text="@{viewModel.model.name}"
(or changemodel
on yourViewModel
touser
)
– takecare
Nov 23 at 0:17
|
show 4 more comments
I am experimenting the new architecture components from Google trying to achieve more reactive code using ViewModel
, LiveData
and DataBinding
.
Basically my idea around ViewModel
is to have only one field of type Model
(user for the record since we are representing a user profile scree). So my ViewModel
class is :
class ViewModel : ViewModel() {
var model = MutableLiveData<User>()
and my Model
class is :
class User(var name: String, var lastName: String, var age: Int)
In my layout file, I am trying to bind the fields on my Model
into the view using DataBinding
plugin. The problem is that since my ViewModel
has a MutableLiveData<User>
I can't access (from xml binding) the fields inside the User
class (name, lastName...).
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="viewModel"
type="com.github.andromedcodes.mvvmtutorial.ViewModel" />
</data>
<RelativeLayout xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:text="@{viewModel.user.name}"/>
</RelativeLayout>
</layout>
Is it even possible to do that? And which is better, having a ViewModel
with separate Fields (String, Int, Whatever...) or re-using a Model
?
android mvvm android-databinding android-architecture-components android-livedata
I am experimenting the new architecture components from Google trying to achieve more reactive code using ViewModel
, LiveData
and DataBinding
.
Basically my idea around ViewModel
is to have only one field of type Model
(user for the record since we are representing a user profile scree). So my ViewModel
class is :
class ViewModel : ViewModel() {
var model = MutableLiveData<User>()
and my Model
class is :
class User(var name: String, var lastName: String, var age: Int)
In my layout file, I am trying to bind the fields on my Model
into the view using DataBinding
plugin. The problem is that since my ViewModel
has a MutableLiveData<User>
I can't access (from xml binding) the fields inside the User
class (name, lastName...).
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="viewModel"
type="com.github.andromedcodes.mvvmtutorial.ViewModel" />
</data>
<RelativeLayout xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:text="@{viewModel.user.name}"/>
</RelativeLayout>
</layout>
Is it even possible to do that? And which is better, having a ViewModel
with separate Fields (String, Int, Whatever...) or re-using a Model
?
android mvvm android-databinding android-architecture-components android-livedata
android mvvm android-databinding android-architecture-components android-livedata
edited Nov 23 at 0:13
asked Nov 22 at 22:51
mohamed aouled issa
429416
429416
you should be able to access those fields on your xml layout. are you getting any errors?
– takecare
Nov 23 at 0:02
Yes i get a data accessor error when i write something like android:text="@{viewModel.user.name}"
– mohamed aouled issa
Nov 23 at 0:04
can you paste your xml layout here? are you declaring your viewmodel under the <data> element?
– takecare
Nov 23 at 0:10
Absolutely! all the variables are under <data> tag. I will edit my post with my xml layout.
– mohamed aouled issa
Nov 23 at 0:12
2
from your view model code, i think you should haveandroid:text="@{viewModel.model.name}"
(or changemodel
on yourViewModel
touser
)
– takecare
Nov 23 at 0:17
|
show 4 more comments
you should be able to access those fields on your xml layout. are you getting any errors?
– takecare
Nov 23 at 0:02
Yes i get a data accessor error when i write something like android:text="@{viewModel.user.name}"
– mohamed aouled issa
Nov 23 at 0:04
can you paste your xml layout here? are you declaring your viewmodel under the <data> element?
– takecare
Nov 23 at 0:10
Absolutely! all the variables are under <data> tag. I will edit my post with my xml layout.
– mohamed aouled issa
Nov 23 at 0:12
2
from your view model code, i think you should haveandroid:text="@{viewModel.model.name}"
(or changemodel
on yourViewModel
touser
)
– takecare
Nov 23 at 0:17
you should be able to access those fields on your xml layout. are you getting any errors?
– takecare
Nov 23 at 0:02
you should be able to access those fields on your xml layout. are you getting any errors?
– takecare
Nov 23 at 0:02
Yes i get a data accessor error when i write something like android:text="@{viewModel.user.name}"
– mohamed aouled issa
Nov 23 at 0:04
Yes i get a data accessor error when i write something like android:text="@{viewModel.user.name}"
– mohamed aouled issa
Nov 23 at 0:04
can you paste your xml layout here? are you declaring your viewmodel under the <data> element?
– takecare
Nov 23 at 0:10
can you paste your xml layout here? are you declaring your viewmodel under the <data> element?
– takecare
Nov 23 at 0:10
Absolutely! all the variables are under <data> tag. I will edit my post with my xml layout.
– mohamed aouled issa
Nov 23 at 0:12
Absolutely! all the variables are under <data> tag. I will edit my post with my xml layout.
– mohamed aouled issa
Nov 23 at 0:12
2
2
from your view model code, i think you should have
android:text="@{viewModel.model.name}"
(or change model
on your ViewModel
to user
)– takecare
Nov 23 at 0:17
from your view model code, i think you should have
android:text="@{viewModel.model.name}"
(or change model
on your ViewModel
to user
)– takecare
Nov 23 at 0:17
|
show 4 more comments
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53438811%2fandroid-mvvm-livedata-and-databinding%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53438811%2fandroid-mvvm-livedata-and-databinding%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
you should be able to access those fields on your xml layout. are you getting any errors?
– takecare
Nov 23 at 0:02
Yes i get a data accessor error when i write something like android:text="@{viewModel.user.name}"
– mohamed aouled issa
Nov 23 at 0:04
can you paste your xml layout here? are you declaring your viewmodel under the <data> element?
– takecare
Nov 23 at 0:10
Absolutely! all the variables are under <data> tag. I will edit my post with my xml layout.
– mohamed aouled issa
Nov 23 at 0:12
2
from your view model code, i think you should have
android:text="@{viewModel.model.name}"
(or changemodel
on yourViewModel
touser
)– takecare
Nov 23 at 0:17