7 data-binding android textview
我目前正在使用databinding我的Android应用程序项目.我想error在我的CustomTextViewfrom 上设置消息,R.string.txtOldPassWordError并从另一个叫做的类中设置它ViewModelClass.
这是我的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}" />
Run Code Online (Sandbox Code Playgroud)
这是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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是来自的字符串 strings.xml
<string name="select">Please Enter Old Password</string>
Run Code Online (Sandbox Code Playgroud)
所以,我想在我的viewModel类中访问此字符串并将其设置为错误消息而不是hardcoded it directly as string.
那我该怎么做呢?我使用的是Android Studio 3.0 Beta版.任何帮助将非常感激.
使用ObservableInt为我工作.将其添加到ViewModel
private final ObservableInt mErrorText = new ObservableInt(R.string.empty_text);
public ObservableInt getErrorText() {
return mErrorText;
}
Run Code Online (Sandbox Code Playgroud)
只需设置一个新的String值
mErrorText.set(R.string.text_not_valid);
Run Code Online (Sandbox Code Playgroud)
在xml中将以下内容添加到TextView中
android:text="@{viewModel.errorText}"
Run Code Online (Sandbox Code Playgroud)
建立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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在转到您的ApplicationClass粘贴
public class YourAppName extends Application {
// Resource Provider
private ResourceProvider mResourceProvider;
public ResourceProvider getResourceProvider() {
if (mResourceProvider == null)
mResourceProvider = new ResourceProvider(this);
return mResourceProvider;
}
}
Run Code Online (Sandbox Code Playgroud)
现在转到您的目录ChangePasswordViewModel并创建ResourceProvider的对象
private ResourceProvider mResourceProvider;
Run Code Online (Sandbox Code Playgroud)
并通过它constroctor的ChangePasswordViewModel
比您可以访问的
userOldPasswordError.set(mResourceProvider.getString(R.string.select));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8406 次 |
| 最近记录: |