我正在使用import java.util.Random;
创建此活动,它从arrays.xml
内的字符串数组中提取问题。从数组中获取的项目显示在布局顶部的textview中。我想在这里实现的是从字符串数组中获取每个项目的匹配背景。我的方法是匹配从问题数组中获取的生成索引,并创建一个if语句。如果item = 0,则此背景显示在代码中的* 。这是我到目前为止实现的,对我的代码的任何建议或改进都是开放的:
Activity
questions = getResources().getStringArray(R.array.questions);
@SuppressLint("NewApi") private void getQuestion(){
TextView questionText = (TextView) findViewById(R.id.question);
Random rand = new Random();
int maxIndex = questions.length;
int generatedIndex = rand.nextInt(maxIndex);
if(generatedIndex == 1){
**screenGame.setBackground(getResources().getDrawable(R.drawable.footballfindtheposition));
}
else
screenGame.setBackground(getResources().getDrawable(R.drawable.mainbg));
questionText.setText(questions[generatedIndex]);
}**
arrays.xml
<string-array name="questions">
<item>Click on the player with the possition of a Center Back</item>
<item>Click on the Player with the possition of Left Center Midfield</item>
<item>Click on the blabla</item>
</string-array>
我在LogCat的代码末尾得到一个NullPointerException
答案 0 :(得分:1)
您可以在包含drawables的arrays.xml中定义另一个数组。确保它与问题数组的大小相同:
<string-array name="backgrounds">
<item>@drawable/footballfindtheposition</item>
<item>@drawable/midfieldfindtheposition</item>
<item>@drawable/blabla...</item>
</string-array>
然后在您的代码中,将其加载为TypedArray:
TypedArray backgrounds = getResources().obtainTypedArray(R.array.backgrounds);
TypedArray中有不同的功能,允许您将内容解释为不同的内容(例如资源ID,维度,文本,整数等)。
您可以使用getResourceId()将值作为资源ID查找,它返回一个int:
TypedArray backgrounds = getResources().obtainTypedArray(R.array.backgrounds);
int maxIndex = questions.length;
int generatedIndex = rand.nextInt(maxIndex);
screenGame.setBackground(getResources().getDrawable(backgrounds.getResourceId(generatedIndex,-1));
questionText.setText(questions[generatedIndex]);
backgrounds.recycle();
这样做意味着您不必拥有long if语句,并且您可以在适当的位置管理您的背景drawable和问题(arrays.xml)