2017-10-10 6 views
4

현재 내 안드로이드 응용 프로그램 프로젝트에 databinding을 사용하고 있습니다. 내 CustomTextViewerror 메시지를 설정하고 R.string.txtOldPassWordError에서 ViewModelClass이라는 다른 클래스를 설정하고 싶습니다. 여기 Android에서 데이터 바인딩의 ViewModel 클래스에서 R.string 가져 오는 방법

내 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 베타 버전을 사용하고 있습니다. 어떤 도움이라도 대단히 감사 할 것입니다.

+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가 컨텍스트를 필요로하기 때문에, 'getResources'메소드를 해결할 수 없습니다. 노력은 –

+0

입니다. 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); 
    } 
} 

지금 지금 ChangePasswordViewModel로 이동 ResourceProvider

private ResourceProvider mResourceProvider; 

의 객체를 생성 constroctor에 전달하여 ApplicationClass로 이동

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

     return mResourceProvider; 
    } 
} 

붙여 넣기 ChangePasswordViewModel

당신이

userOldPasswordError.set(mResourceProvider.getString(R.string.select));