从strings.xml文件中的字符串数组加载字符串

时间:2012-03-02 18:37:55

标签: android

我在我的应用中使用以下代码:

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)

3 个答案:

答案 0 :(得分:9)

只要应用程序处于活动状态,就可以使用Application对象保存字符串数组。

**编辑**

首先,您必须在AndroidManifest.xml中定义自定义Application类:

<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

中找到更多信息

答案 1 :(得分:1)

答案 2 :(得分: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;
    }