2011-11-21 3 views
6
でArrayAdapterからのリソースへのアクセス

の取得私はは、Android

<color name="lightGrey">#FFCCCCCC</color> 
<integer name="KEY_POSITION_ARM">2</integer> 

:定義されたいくつかのリソース、例えばを持っている...と私はTextViewsに項目を表示ArrayAdapterを持っています。 「タイプContinuityAdapterため不定)メソッドgetResources(」

keyPosition = getResources().getInteger(R.integer.KEY_POSITION_ARM); 
moduleDataView.setTextColor(getResources().getColor(R.color.darkgreen)); 

...しかし、私のようなエラーが出:私のようなコードを使用して値にアクセスしようとしています。 (ContinuityAdapter extends ArrayAdapter)

良い方法がありますか?

おかげ

これは例である:

switch (currentModule.keyPosition) { 
case activity.getResources().getInteger(R.integer.KEY_POSITION_ARM): 
    moduleDataView.keyPosition.setText("TEST"); 
    moduleDataView.keyPosition.setTextColor(Color.GREEN); 
    break; 
case R.integer.KEY_POSITION_ARM: 
    moduleDataView.keyPosition.setText("ARM"); 
    moduleDataView.keyPosition.setTextColor(Color.RED); 
    break; 
} 

最初の場合は、エラーを与え、そして第二はないが、いずれかのXMLファイルからの値を使用していません。あなたが言うように、私はどこでもそれを使用する限り、私はR ...の値を使うことができます。これが「ベストプラクティス」と考えられるかどうかは不明です。ありがとう

答えて

17

Context.getResources()メソッドを呼び出すにはContextオブジェクトが必要です。通常は、カスタムアダプタのコンストラクタを使用して、コンテキストまたはそのサブクラス(つまりアクティビティ)を渡すことができます。

同様:その後、

public ContinuityAdapter extends ArrayAdapter { 
    private final Context mContext; 
    ... 
    public ContinuityAdapter(Context context) { 
     mContext = context; 
    } 
} 

と使用:

mContext.getResources()... 

編集: これはスイッチを避けるために、ケースのように思われます。参照:

+0

感謝。私はそれを試していましたが、うまくいかなかったと思っていましたが、別のエラーが発生していました。 case文は、リソースが定数であっても、明らかに定数式を必要とします。私はif文を使って立ち往生していますか? – ARQuattr

+0

私はもっとコードを見る必要があります。一般的に私はスイッチのケースを避けようとしました。または、リソースIDを直接使用しています(例:R.id.xyz)。 – user802421

+0

質問を編集してより良いコード例を追加しました。ありがとう – ARQuattr