RecyclerView не меняет значения ресурсов при смене языка - PullRequest
0 голосов
/ 25 сентября 2019

Я меняю язык моего приложения на арабский, используя фрагмент кода ниже.Но когда он меняется, ресурсы внутри RecyclerView не меняются.Это только изменение направления (в пределах Activity), все другие виды меняют значения.(mipmap, строка), но значения для RecyclerView внутри фрагмента не изменяются.

Файл класса

Locale locale;
Sessions session = new Sessions(context);
if (session.getLanguage().equals("1")) {
 locale = new Locale("en-rU");
}
else{
 locale = new Locale("ar");
}
Locale.setDefault(locale);
Configuration config = new Configuration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
  config.setLocale(locale);
} else {
  config.locale = locale;
}
context.getResources().updateConfiguration(config, 
context.getResources().getDisplayMetrics());
}

Файл XML-макета

<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/spotList"
    tools:listitem="@layout/recycler_spot"/>

Класс адаптера

public class ItemsAdapter extends RecyclerView.Adapter<ItemsAdapter.CustomViewHolder> {
Context context;
OnItemClick onItemClick;

public ItemsAdapter(Context context){
    this.context=context;
}


@NonNull
@Override
public CustomViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view= LayoutInflater.from(context).inflate(R.layout.recycler_items,viewGroup,false);
    return new CustomViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull CustomViewHolder customViewHolder, int i) {
}

@Override
public int getItemViewType(int position) {
    return super.getItemViewType(position);
}

@Override
public int getItemCount() {
    return 6;
}

public class CustomViewHolder extends RecyclerView.ViewHolder {
    public CustomViewHolder(@NonNull View itemView) {
        super(itemView);
    }

}

public interface OnItemClick{
    public void onItemClick(int position);
}

}

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Я меняю язык своего приложения, используя следующую функцию.

public void setUserMobileLanguage(String sUserLanguageCode) {
        try {
            String[] arrLngCode = sUserLanguageCode.split("-");
            if (arrLngCode.length > 1)
                sUserLanguageCode = arrLngCode[0];

            if (sUserLanguageCode.equals("he")) {
                sUserLanguageCode = "iw";
            }

            if (sUserLanguageCode.equals("en")) {
                new LocalHelper().setLocal(mContext, sUserLanguageCode); //set app en language
                getHelper().setAppLanguage(sUserLanguageCode);  //store for later use
            } else {
                if (!Utilty.isLanguageAvailableInMobile(sUserLanguageCode)) {  //check language available in mobile
                    sUserLanguageCode = "en";//set english as app language
                    makeToast(getString(R.string.selected_language_is_not_support_by_your_mobile));
                }
                new LocalHelper().setLocal(mContext, sUserLanguageCode); //set app language
                getHelper().setAppLanguage(sUserLanguageCode);  //store for later use
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Проверьте языки поддержки системы или не используйте приведенный ниже код.

public static boolean isLanguageAvailableInMobile(String lngCode) {
        return Arrays.toString(Locale.getAvailableLocales()).contains(lngCode);
    }

Пример моего файла строковых ресурсов.

enter image description here

Используя приведенный выше код и файл ресурсов, я могу изменить макет своего приложения итекст.

0 голосов
/ 26 сентября 2019

Я нашел решение.

Я вызываю это в конструкторе адаптера Recyclerview.я не знаю, если это правильный метод, но моя проблема решена

 @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
public static void setResources(Context context) {
    Locale locale;

    Sessions session = new Sessions(context); 
    //Log.e("Lan",session.getLanguage());
    if (session.getLanguage().equals("1")) {
        locale = new Locale("en-rUS");
    }else{
        locale = new Locale("ar");
    }

    Resources res=context.getResources();
    DisplayMetrics dm=res.getDisplayMetrics();
    android.content.res.Configuration configuration=res.getConfiguration();
    configuration.setLocale(locale);
    res.updateConfiguration(configuration,dm);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...