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

问题描述:

我使用下面的代码在我的应用程序:加载字符串中的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

只要应用程序处于活动状态,您就可以使用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

你可以用静态方法创建一个辅助对象来加载/返回字符串数组,因此它只会被加载一次。如果你想获得真正的幻想,你可以声明它是一个软或弱引用,所以它不会占用内存,但那是你的呼叫......取决于数组和应用程序的大小。

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; 
    }