2013-10-05 81 views
2

我想能夠從互聯網更新字符串。比方說,我在哈希映射中下載了更新後的字符串列表,每個字符串都映射到熱ids(R.string。)。我想我可以修改string.xml,但是他們寫在岩石上我猜。Android - 從互聯網加載(更新)字符串資源?

如何可以替換視圖的字符串,並使用更新的列表,同時充氣的東西?目前我嘗試了兩件事。

首先,我爲我的活動創建了一個自定義getResources,它返回具有修改的getString的自定義資源對象。但是,可能活動充氣機不使用getResources(),因此沒有任何更改。

之後,我想我可以重寫setText方法的按鈕等,但他們是最終的一些原因。

其他建議?我想讓這個過程自動化,否則會非常困難。 (我甚至可以找到其視圖使用哪個ID嗎?也許我可以分析資源個XML)

感謝所有

回答

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(); 

更新

好吧,我知道了。那麼你應該創建自己的類擴展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將被重新排序。祝你好運!

+1

謝謝,但存儲的東西不是真的有問題,我只是想自動化充氣過程。我不想寫像button1.setText(「更新的字符串」)等東西 – taytay