[英]Android - Loading (updating) string resources from internet?
我希望能夠從互聯網更新字符串。 假設我在哈希圖中下載了更新的字符串列表,每個字符串都映射到其id(R.string。)。 我以為我可以修改string.xml,但是我猜它們是寫在岩石上的。
如何在填充內容時替換視圖的字符串並使用更新的列表? 目前,我嘗試了兩件事。
首先,我為我的活動創建了一個自定義getResources,它返回一個帶有修改過的getString的自定義資源對象。 但是,活動充氣器可能未使用getResources(),因此沒有任何變化。
之后,我以為我可以覆蓋按鈕等的setText方法,但是由於某些原因它們是最終的。
還有其他建議嗎? 我想使這個過程自動化,否則會很難。 (我什至可以找到哪個視圖使用哪個ID?也許我可以解析資源XML)
謝謝大家
使用數據庫或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();
更新
好,我知道了。 然后,您應該像這樣創建自己的擴展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保留自定義字符串,因為當您更新應用程序時,會導致資源ID發生重新排序。 祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.