2012-03-02 17 views
4

私は私のアプリに次のコードを使用しています:読み込んで文字列

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

問題は、私はこのコードを何度も含まれている活動を開始することです。 私は、このコードが効率的ではないと感じています。なぜなら、私は、配列全体を読み込んで、文字列配列が非常に大きいので、1つの要素だけを使用する必要があるからです。

希望の要素を直接ロードする方法はありますか?事前に

どうもありがとう:)

更新: Talihawkは下記のように私は、Applicationオブジェクトを使用してみましたが、私は次の行でエラーが発生します。

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

いただきました!でより多くの情報を見つけることができます問題? –

+0

私はこのアクティビティを開始するたびに(私はそれを多く起動します)、大きな文字列配列をロードしてから、1つの要素を使用します。 希望の要素を直接ロードする方法はありますか? – Elshaer

答えて

8

アプリケーションがアクティブな間、アプリケーションオブジェクトを使用して文字列配列を保存できます。

**あなたのAndroidManifest.xmlでカスタムアプリケーションのクラスを定義する必要がありEDIT **

まず:

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

** EDIT **

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

+0

@Elshaerあなたの記憶? – Talihawk

+0

@Elshaerなぜ私はエラーが発生しているのか分かっていて、解決策の別の欠落部分で私の答えを編集しました。これがうまくいきます:) – Talihawk

1

静的メソッドを使用してヘルパーオブジェクトを作成して、文字列の配列をロードまたは返すことができます。したがって、ロードされるのは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; 
    } 
関連する問題