I am looking for a way to change the value of a string resource dynamically. I tried to use reflection, but it claims "invalid value for field".
I use strings for the values ββin the layout, but they need to be changed for different languages.
See attached code below.
public class Lang{ public static void langInit(){ java.lang.reflect.Field[] langStringFields = R.string.class.getFields(); Log.d(Global.TAG,"--> Lang Listing: " + langStringFields.length); Log.d(Global.TAG,"--> Pref for language:"); String prefInLang = Prefs.cPrefsGet.getString("in_lang","en"); String fieldName = null; String fieldValue = null; String newFieldName = null; String tmpA = "one"; for (int i=0; i<langStringFields.length; i++){ java.lang.reflect.Field field = langStringFields[i]; fieldName = field.getName(); try { fieldValue = Global.gActivity.getString(field.getInt(R.string.class)); } catch (Exception e) { e.printStackTrace(); } if (fieldName.substring(0,2).equals("lo")){ try { newFieldName = R.string.class.getField(prefInLang + "_" + fieldName.substring(3)).getName(); } catch (Exception e) { e.printStackTrace(); } Log.d(Global.TAG,"--> Field: " + fieldName + "value: " + fieldValue + "new field:" + newFieldName); try { java.lang.reflect.Field field2 = Class.forName(R.string.class.getName()).getDeclaredField(newFieldName); field2.setAccessible(true); field2.set(R.string.class,tmpA.toString()); }catch (Exception e) { e.printStackTrace(); } } } } }
android string resources
Kevin Parker Mar 29 2018-11-21T00: 00Z
source share