2011-12-30 16 views
2

startActivityForResultを使用してアクティビティの結果に応答しようとしています。私は期待された結果を得ていますが、結果にどのように反応するかは不明です。私がしたいのは、結果に応じて別のArrayList(リソース)を呼び出すことです。startActivityForResultに応答

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK) { 
     Bundle d = data.getExtras(); 
     String oil = d.getString("oil"); 
     Resources res = getResources(); 
     String[] oil_info = res.getStringArray(R.array.OIL); 
     ... 
    } 
} 

私は結果に応じてR.array.OILを変更したいと思います。 oil = 'BASIL'の場合、R.array.OILをR.array.BASILに変更します。私はハッシュマップを作成することを考えましたが、ハッシュマップにプリミティブを置くことができないので、R.array.OILをハッシュマップに配置する方法を理解できませんでした。私はかなりアンドロイドとjavaに新しいですので、これを行うより良い方法があると確信しています。どんな助けでも大歓迎です。ありがとう。

答えて

1

getIdentifier()を以下のように使用してください。

配列型では2つの項目は異なる値を持つOILとBASILとして存在します。 にアクセスすると、R.array.OILとR.array.BASILのようにアクセスできます。上記のコードで

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK) { 
     Bundle d = data.getExtras(); 
     String oil = d.getString("oil"); 
     Resources res = getResources(); 
     int id = res.getIdentifier(oil, "array", getPackageName()); 
     String[] oil_info = res.getStringArray(id); 
     ... 
    } 
} 

文字列oilは、idR.array.OILoilなり"OIL"であるならば、idR.array.BASIL

+0

@NCAggieなります"BASIL"あり、それはアプリを実行する前にクリーンなプロジェクトを動作しない場合は、あなたのために働いています。 –

+0

ありがとう。新しい方法を学ぶのは素晴らしいことです。 – NCAggie

+0

@ NCAggieあなたの質問に自分の答えが正しいと感じたら、それをマークしてください。これは、stackoverflowの仕組みです。 bye .. –

0

あなたがしようとしているのは実際には永久保存の試みです。これは "Res"フォルダまたは "R.smthing.smthing"データには許可されていません。 プリミティブ保存の場合はshared preferencesを使用します。 アレイをsharedPreferencesで保存できるかどうかは、シリアライズまたはSQLiteデータベースを使用してください。