2013-10-05 4 views
2

Я хочу, чтобы иметь возможность обновлять строки из Интернета. Скажем, я загрузил список обновленных строк в хэш-карте, каждая строка сопоставлена ​​с идентификаторами (R.string.). Я думал, что могу изменить string.xml, но они написаны на скалах, я думаю.Android - Загрузка (обновление) струнных ресурсов из Интернета?

Как заменить строки вида и использовать обновленный список при раздувании вещей? В настоящее время я пробовал две вещи.

Сначала я создал пользовательский getResources для своей активности, который возвращает пользовательский объект ресурса с измененным getString. Однако, вероятно, инфлятор активности не использует getResources(), поэтому ничего не меняется.

После этого я думал, что могу переопределить методы setText кнопок и т. Д., Однако они являются окончательными по некоторым причинам.

Любые другие предложения? Я хочу автоматизировать этот процесс, иначе это будет очень сложно. (Могу ли я найти даже рассматривающее использование которых ида? Может быть, я могу разобрать XMLs ресурсов)

Спасибо всем

ответ

1

использования базы данных, или sharedPreferences сохранить значение строки, и использовать по умолчанию R.string.bla_bla, потому что нет возможности изменять ресурсы, но обновлять все приложение. Попробуйте что-то вроде этого, чтобы прочитать строку:

SharedPreferences mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); 
String bla_bla = mSharedPreferences.getString("R.string.bla_bla", context.getString(R.string.bla_bla)); 

И заменить значение:

Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); 
editor.putString("R.string.bla_bla", bla_bla); 
editor.commit(); 

обновленный

Хорошо, я получил его. Затем вы должны создать свой собственный класс extends Button, как этот.

public class MButton extends Button { 
    String mText; 
    public MButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     loadText(context, attrs); 
    } 
    public MButton(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     loadText(context, attrs); 
    } 
    void loadText(Context context, AttributeSet attrs) { 
     String stringId = attrs.getAttributeValue("http://schemas.android.com/apk/res/android", "text"); 
     // stringId = @2130903040 
     int intStringId = Integer.parseInt(stringId.substring(1)); 
     // intStringId = 2130903040 
     mText = PreferenceManager.getDefaultSharedPreferences(context).getString(stringId, context.getString(intStringId)); 
    } 
    @Override 
    protected void onFinishInflate() { 
     super.onFinishInflate(); 
     setText(mText); 
    } 
} 

и использовать его в верстке:

<com.example.test.MButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/app_name" 
     android:onClick="clicked" /> 

Но убедитесь, что вы очистить все SharedPreferences сохраняет пользовательские строки, при обновлении приложения, вызвать ваши идентификаторы ресурсов будут заказаны. Удачи!

+1

Спасибо, но хранение вещей на самом деле не проблема, я просто хочу автоматизировать процесс раздувания. Я не хочу писать такие вещи, как button1.setText («обновленная строка») и т. Д. – taytay

Смежные вопросы