2017-10-10 11 views
4

私は現在、アンドロイドアプリケーションプロジェクトにdatabindingを使用しています。私はCustomTextViewerrorメッセージを設定してR.string.txtOldPassWordErrorからViewModelClassという別のクラスから設定します。ここで ViewModelでR.stringを取得する方法Androidでデータバインディングのクラス

は私の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}" /> 

であり、これは

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

ViewModelClass.javaであり、これは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)でアクセスすることができますよりも、0

。 またはhttps://stackoverflow.com/questions/7493287/android-how-do-i-get-string-from-resources-using-its-name –

+0

この@SagarAgharaを試してみましたが、メソッド 'getResources'を解決できません "、努力のためには –

+0

getResourcesはコンテキストが必要なためです。 MVVMアーキテクチャを使用していますか?コンストラクタを介してアクティビティやフラグメントから文字列を渡すことはできませんか? – Raghunandan

答えて

2

今、あなたの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; 

のオブジェクトを作成し、constroctorにそれを渡して貼り付け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); 
    } 
} 

を作成します。。あなたは

userOldPasswordError.set(mResourceProvider.getString(R.string.select)); 
関連する問題