[英]How to Get R.string in ViewModel Class of DataBinding in Android
I am currently using databinding
for my android application project. 我目前正在为我的Android应用程序项目使用
databinding
。 I want to set the error
message on my CustomTextView
from R.string.txtOldPassWordError
and set it up from another class called ViewModelClass
. 我想从
R.string.txtOldPassWordError
在CustomTextView
上设置error
消息,并从另一个名为ViewModelClass
类中设置它。
Here is my XML code 这是我的XML代码
<com.horseproject.widget.CustomEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginTop="@dimen/dp_20"
android:drawablePadding="@dimen/dp_10"
android:hint="@string/enter_old_password"
android:inputType="textPassword"
android:lines="1"
android:text="@={ChangePasswordVM.userOldPassword}"
android:textColorHint="@color/gray_text"
app:drawableLeftCompat="@drawable/ic_password_lock"
app:drawableTintCompat="@color/gray_app"
app:error="@{ChangePasswordVM.userOldPasswordError}" />
and this is ViewModelClass.java 这是ViewModelClass.java
public class ChangePasswordViewModel extends BaseObservable {
public ObservableField<String> userOldPassword = new ObservableField<>("");
public void userPasswordChange() {
if ((TextUtils.isEmpty(userOldPassword.get()))) {
userOldPasswordError.set("Please enter your old password");
return;
} else if (userOldPassword.get().length() <= 5) {
userOldPasswordError.set("Password should contain minimum 6 characters");
return;
} else {
userOldPasswordError.set(null);
}
}
}
and this is string from strings.xml
这是来自
strings.xml
<string name="select">Please Enter Old Password</string>
So, I want to access this string in my viewModel class and set it as error message instead of hardcoded it directly as string
. 所以,我想在我的viewModel类中访问此字符串并将其设置为错误消息,而不是
hardcoded it directly as string
将其hardcoded it directly as string
。
So how can i achieve this? 那我该怎么做呢? I am using Android Studio 3.0 Beta Version.
我使用的是Android Studio 3.0 Beta版。 Any help would be really appreciated.
任何帮助将非常感激。
Using an ObservableInt worked for me. 使用ObservableInt为我工作。 Adding this to the ViewModel
将其添加到ViewModel
private final ObservableInt mErrorText = new ObservableInt(R.string.empty_text);
public ObservableInt getErrorText() {
return mErrorText;
}
And just setting a new String value 只需设置一个新的String值
mErrorText.set(R.string.text_not_valid);
In the xml add the following to the TextView 在xml中将以下内容添加到TextView中
android:text="@{viewModel.errorText}"
Create ResourceProvider
class 创建
ResourceProvider
类
public class ResourceProvider {
private Context mContext;
public ResourceProvider(Context mContext) {
this.mContext = mContext;
}
public String getString(int resId) {
return mContext.getString(resId);
}
public String getString(int resId, String value) {
return mContext.getString(resId, value);
}
}
now go to your ApplicationClass
and paste 现在转到您的
ApplicationClass
并粘贴
public class YourAppName extends Application {
// Resource Provider
private ResourceProvider mResourceProvider;
public ResourceProvider getResourceProvider() {
if (mResourceProvider == null)
mResourceProvider = new ResourceProvider(this);
return mResourceProvider;
}
}
now go to your ChangePasswordViewModel
and create object of ResourceProvider 现在转到
ChangePasswordViewModel
并创建ResourceProvider的对象
private ResourceProvider mResourceProvider;
and pass it in constroctor
of ChangePasswordViewModel
并在
ChangePasswordViewModel
constroctor
中传递它
than you can access it by 比你可以访问它
userOldPasswordError.set(mResourceProvider.getString(R.string.select));
You can send context into the layout like this : 您可以将上下文发送到布局中,如下所示:
XML : XML:
<!--
<data>
<variable
name="observable"
type="...MyBaseObservableClass"
/>
</data>
-->
android:text="@{observable.getDescription(context)}"
MyBaseObservableClass.kt : MyBaseObservableClass.kt:
@Bindable
fun getDescription(context: Context): String {
return context.getString(R.string.my_string)
}
fun setNewData(data: Object) {
this.data = data
notifyPropertyChanged(BR.description)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.