2017-03-18 5 views
0

データベースから名前のリストを取得し、それぞれの名前にイメージを割り当てたいとします。 int resID = getResources().getIdentifier(imgName , "drawable", getPackageName());を使用することができますが、イメージを異なる名前に割り当てる必要があるケースはほとんどありません。キー/名前でアクセスできる値としてドロウアブルを格納する方法

上記のコードでは、drawableのリソースIDをその名前で取得できます。しかし、私は別の名前で同じ画像を保存したくないし、配列を使いたくない。

私たちが割り当てた名前でdrawableへの参照を得る方法はありますか?

実行しようとしているのは、実行時間を 以下に抑えることです。

+0

なぜアレイを使いたくないのですか?配列や手作業でコード化されたものが配列のように見えない限り、これを行う方法が存在するかどうかはわかりません。たぶんハッシュマップを使用しますか?また、SQLiteを使用して格納することもできますが、最終的には配列のようになり、配列を使用するほうが良いでしょう。 – Feuby

+0

私はdrawableに格納する画像がたくさんあり、配列に格納すると私は各名前の配列をループする必要があり、実行時間が長くなります。 –

+0

ハッシュテーブル(ハッシュマップではありません)を使用すると、低価格で直接名前からdrawableを得ることができます – Feuby

答えて

0

質問のコメントと次のユーザーには次のように書かれています。最高のソリューションはハッシュテーブルに対応していると思います。

Hashtable<String, Drawable> map=new Hashtable<>(SIZE); 
//iterates for each couple key/name - drawable you need 
map.put(KEY, drawable); 
//then you can access to drawables easily with the name : 
Drawable d=map.get(KEY); 

すべてのハッシュテーブルの費用はhastableデータ変更にリンクされています、要素の追加要素を更新(と私は更新のためにもわからないんだけど)、要素を削除します。あなたのハッシュは固定されているように見えますが、文字通りコストはかかりません(メモリ使用量を除く)、配列内の位置を指定した場合と同じように、アクセスはほぼ[定数で、サイズは直線ではありません]

私はそれがあなたが必要とする解決策だと思います。 複数のキーを持つドロアブルを作成できますが、問題はありません。しかし、1つのキーは常に1つのドロウアブルにつながります。

map.put();おそらくそれがプリミティブデータである場合を除いて、値(ここではドロウアブル)を複製​​していません。したがって、変更可能な場合は、ドロアブルの変更は、同じドロアブルを持つすべてのキーに適用されます。これは問題ではないかもしれませんが、他の用途にハッシュテーブルを使用する場合は、そのことを知っておく必要があります。

EDIT: フラグメントごとにこのハッシュテーブルが必要なので、各フラグメントが継承する抽象クラスを作成し、そのクラス内でこのhastableをprotectedとして宣言する必要があります。したがって、各サブクラスはそれを取得できます。また、このハッシュテーブルを非公開にし、hastableからdrawableを取り戻す関数 "Drawable getDrawableFromName(String name)"を実装することもできます。

アクティビティのようなことが必要な場合に備え、アクティビティの抽象メインサブクラスを用意することを強くお勧めします。

+0

この問題は、同じ値で使用するすべてのフラグメントに対してハッシュテーブルを実装する必要があることを意味します。さまざまなタブのスワイプビューで使用されます。フラグメント内の特定のキー値を取得するため、イメージでUIを更新する必要があります。ハッシュテーブルを一度しか実装せず、別のフラグメントで使用する方法はありますか? –

+0

はい、あります。すべてのフラグメントは、抽象カスタムフラグメントクラスから継承する必要があります。次に、このハッシュテーブルを保護された静的(および変更しない場合は最終的)として定義します。したがって、すべてのフラグメントからアクセスできます。この種の問題のために、あなたのすべてのアクティビティが継承する抽象クラス(およびあなたのすべてのフラグメントに対して別のクラス)を持つことは、常に良い方法です。精度の答えを更新する – Feuby

+0

ハッシュマップとハッシュテーブルはAndroid用にはお勧めしません –

関連する問題