私の問題は、XML で定義された文字列の配列の読み込みがアプリで機能することですが、ADT グラフィカル レイアウト プレビューでエラーが発生することです。
このエラーが原因で、グラフィック レイアウトにグラフィックが表示されなくなり、他のグラフィックを操作するのが難しくなります。しかし、アプリをビルドして実行すると、ビューは文字列を正常に読み込んで表示します。
したがって、私のコードは正しいと思いますが、次のいずれかです。
- グラフィカル レイアウト プレビューのいくつかの制限といくつかの回避策がありません
- または、アプリで機能しているように見えても、明らかな何かが欠けていて、間違ったことをしている可能性があります
array.xml ファイルで定義した配列を取得するカスタム ビューがあります。
public class ScoreTable extends View {
[...]
@Override
protected void onDraw(Canvas canvas) {
[...]
int score_vals[] = getResources().getIntArray(R.array.score_vals);
[...]
}
[...]
}
私の配列は res/values/array.xml で定義されています:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="score_vals">
<item >10</item>
<item >20</item>
<item >50</item>
</array>
</resources>
グラフィカル レイアウトは空白で、次のように表示されます。
Int array resource ID #0x7f050000
Exception details are logged in Window > Show View > Error Log
しかし、もちろん、「public static final int score_vals=0x7f050000;」があります。R.javaで!
このエラーの詳細は 50 の深さのスタックにありますが、これに続きます。
android.content.res.Resources$NotFoundException: Int array resource ID #0x7f050000
at android.content.res.Resources.getIntArray(Resources.java:405)
at com.threecats.poker.ScoreTable.onDraw(ScoreTable.java:53)
at android.view.View.draw(View.java:6740)
[...]
では、getResources().getXXXArray() は ADT グラフィカル レイアウト プレビューのコンテキストで機能する必要がありますか?
XML で「array」と「array-integer」の両方を試しましたが、両方ともアプリでは機能しますが、プレビューでは機能しません。また、ビューのコンストラクターからコンテキストをプライベート コンテキスト メンバーに保存しようとしましたが、どちらも役に立ちませんでした。