2012-03-02 75 views
4

我使用下面的代碼在我的應用程序:加載字符串中的strings.xml文件

string_array = getResources().getStringArray(R.array.array_of_strings); 
my_text_view.setText(string_array[i]); 

的問題是,我開始包含該代碼多次活動。 所以,我覺得這段代碼是低效率的,因爲每次我開始活動時,我都必須加載整個數組來只使用一個元素,因爲字符串數組非常大。

有沒有辦法直接加載想要的元素?

感謝很多提前:)

更新: 我嘗試使用Application對象爲Talihawk如下所述,但我會在下面一行的錯誤:

MyApplication my_obj = (MyApplication) getApplication(); 
string_array = my_obj.getStringArray(); 

的錯誤是:

android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)

+0

什麼更多信息問題? – 2012-03-02 18:43:05

+0

每當我開始這個活動(我開始它很多),我加載一個大的字符串數組,然後使用一個元素。 有沒有辦法直接加載想要的元素? – Elshaer 2012-03-02 18:46:37

回答

8

只要應用程序處於活動狀態,您就可以使用Application對象來保存字符串數組。

**編輯**

首先,你必須在你的AndroidManifest.xml中定義您的自定義應用程序類:

<application 
    android:name="MyApplication" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
> 

**編輯**

public class MyApplication extends Application { 

    private String[] string_array; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     string_array = getResources().getStringArray(R.array.array_of_strings); 
    } 

    public String[] getStringArray() { 
     return string_array; 
    } 
} 

而在你的活動只是:

string_array = ((MyApplication) getApplication()).getStringArray(); 
my_text_view.setText(string_array[i]); 

這樣你的字符串數組將只爲您的應用程序的持續時間一旦加載(如果您的應用程序被殺死你無論如何都要重新加載它)

您可以在以下link

+0

非常感謝:)但遇到以下行時出現錯誤:MyApplication my_obj =(MyApplication)getApplication(); line string_array = my_obj.getStringArray(); android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)非常感謝...我真的很感謝你的幫助:) – Elshaer 2012-03-03 09:14:20

+0

@Elshaer你可以發佈stacktrace你的恐懼? – Talihawk 2012-03-09 19:56:21

+0

@Elshaer我想我知道你爲什麼會遇到錯誤,並用解決方案的另一個缺失部分編輯我的答案。希望這有效:) – Talihawk 2012-03-09 20:01:43

1

你可以用靜態方法創建一個輔助對象來加載/返回字符串數組,因此它只會被加載一次。如果你想獲得真正的幻想,你可以聲明它是一個軟或弱引用,所以它不會佔用內存,但那是你的呼叫......取決於數組和應用程序的大小。

public class StringHelper { 
    private static String[] stgArray; 
    public static String[] getMyStringArray(Context ctx) { 
     if (stgArray == null) { 
      stgArray = ctx.getResources().getStringArray(R.array.array_of_strings); 
     } 
     return stgArray; 
    } 
相關問題