2017-10-10 307 views
4

我目前正在爲我的android應用程序項目使用databinding。我想在我的CustomTextView上設置error消息從R.string.txtOldPassWordError,並將其設置爲另一個名爲ViewModelClass的類。如何在ViewModel中獲取R.string Android中的DataBinding類

這裏是我的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}" /> 

這是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); 
     } 
    } 
} 

這是strings.xml

<string name="select">Please Enter Old Password</string> 

所以,我想訪問我的viewModel類中的這個字符串,並將其設置爲錯誤消息而不是hardcoded it directly as string

那麼我該如何做到這一點?我正在使用Android Studio 3.0 Beta版本。任何幫助將非常感激。

+0

getResources()的getString(R.string.select)訪問它。 或引用此https://stackoverflow.com/questions/7493287/android-how-do-i-get-string-from-resources-using-its-name –

+0

我試過這@SagarAghara,但是說「無法解析方法'getResources'「,thx努力 –

+0

這是因爲getResources需要上下文。你有沒有機會使用MVVM架構?你不能通過構造函數從活動或片段傳遞字符串嗎? – Raghunandan

回答

2

創建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); 
    } 
} 

現在去你的ApplicationClass並粘貼

public class YourAppName extends Application { 
    // Resource Provider 
    private ResourceProvider mResourceProvider; 
    public ResourceProvider getResourceProvider() { 
     if (mResourceProvider == null) 
      mResourceProvider = new ResourceProvider(this); 

     return mResourceProvider; 
    } 
} 

現在去你的ChangePasswordViewModel,創造ResourceProvider

private ResourceProvider mResourceProvider; 

對象,並傳遞它constroctorChangePasswordViewModel

比你可以通過

userOldPasswordError.set(mResourceProvider.getString(R.string.select)); 
相關問題