2016-05-15 3 views
2

私は静的変数で画像を参照することが可能かどうか疑問に思っていましたか?私は持っているショッピングカートの例を変更しようとしていますが、既存の商品リストに画像を追加するのに問題があります。私は次のように私はImageViewのが宣言したAndroidで静的コンテキストで画像を宣言するにはどうすればよいですか?

...私はそうここに、例をしようとした場合しかし、それは良いかもしれ、正しく質問を求めているのかはわからない:

public static ImageView imgView = (ImageView)findViewById(R.id.ivProductImage); 

次のように私は、ImageViewの上に画像を配置:

imgView.setImageResource(R.drawable.bg); 

を私は次のように静的変数で呼ばれるように、それを必要とするので、私はそれが静的持っている必要があります理由は次のとおりです。

public static final Product PRODUCT1 = new Product(1, imgView, "Product Name", BigDecimal.valueOf(4.00), "Product Description"); 

私は本当に各製品変数の画像を追加したいだけです。だから私はの静的なProduct変数に画像を置くだけの簡単な方法がありますか?

上記よりも効率的な方法があるかどうかはわかりませんが、私はあなたにこの点についていくつかの光を照らすことができると期待しています:)読者のみなさん、ありがとう、私は楽しみにしています援助と指導。

答えて

2

私は次のようにImageViewの宣言があります

二つの問題がある

  1. それがクラッシュ(ほとんどの場合)、または可能性のいずれかがnullを返しますが。

  2. メモリがリークします。

あなたはsetContentView()が呼び出された(または、あなたがそうでなければ見つけるために探しているビューが作成された)後までfindViewById()を呼び出すことはできません。静的なイニシャライザからはできません。通常は、アクティビティのonCreate()で行われます。

staticフィールドのImageViewに保持することは、Activityの全フィールドと、それ以外はすべてActivityのフィールドを保持します。さらに、ユーザーが画面を回転させたり、ウィンドウのサイズを変更したり、設定を変更したりすると、ImageViewは無効になります。新しいActivityインスタンスが作成されますが、staticImageViewは古いActivity用です。

私は次のように静的変数で呼ばれるように、それを必要とするので、私はそれが静的持っている必要があります理由は次のとおりです。

はそのstaticフィールドを取り除くと、他のいくつかの方法であなたの問題を解決。

+0

私が本当にやりたいことは、イメージを置くことです。imgviewは静的変数に必要です。それは可能ですか?たとえば、 public static final Product PRODUCT1 = new Product(1、R.drawable。bg、 "Product Name"、BigDecimal.valueOf(4.00)、 "Product Description"); –

+1

@PaulSamaroo: "私のimgviewは静的変数に必要です" - 私は静的である必要はないことを保証します。あなたの本当の問題が何であれ解決するにはどのように最善の方法を尋ねるスタックオーバーフローの別の質問をすることがあります。 – CommonsWare

関連する問題