来自与背景匹配的字符串数组的随机数

时间:2015-03-15 18:14:30

标签: java android arrays

我正在使用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

1 个答案:

答案 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)