[英]App will not randomize the next image on ImageView, tag Array is not synced with the Imageview. How do I fix this?
When I run this app the first sign is loaded into the ImageView, it's tag matches the text in a particular button. 当我运行此应用程序时,第一个符号会加载到ImageView中,它的标签与特定按钮中的文本匹配。
Then I have a method (at the bottom) where it is supposed to randomly pick the next image from an array, and the corresponding String from an ArrayList. 然后,我有一个方法(位于底部),该方法应该从数组中随机选择下一张图像,并从ArrayList中选择相应的String。
The problem is after the first answer, it will not load a new image. 问题是在第一个答案之后,它将不会加载新图像。
But apparently changes the tag as it will tell me it is wrong in a Toast. 但是显然更改了标签,因为它将告诉我在Toast中是错误的。 How do I fix this?
我该如何解决?
package com.example.roadsignquiz;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity {
ArrayList<String> answersArray = new ArrayList<String>();
ArrayList<Integer> randomAnswerList = new ArrayList<Integer>();
ArrayList<String> tagArray = new ArrayList<String>();
int signIndex;
Random random = new Random();
Button button1;
Button button2;
Button button3;
Button button4;
Button button5;
Button button6;
Button button7;
ImageView signImage;
int answer1;
int answer2;
int answer3;
int answer4;
int answer5;
int answer6;
int answer7;
int randomPicIndex = random.nextInt(7);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
signImage = (ImageView) findViewById(R.id.signImageView);
for (int i = 0; i < 7; i++) {
randomAnswerList.add(Integer.valueOf(i));
}
Collections.shuffle(randomAnswerList);
answer1 = randomAnswerList.get(1);
answer2 = randomAnswerList.get(2);
answer3 = randomAnswerList.get(3);
answer4 = randomAnswerList.get(4);
answer5 = randomAnswerList.get(5);
answer6 = randomAnswerList.get(6);
answer7 = randomAnswerList.get(0);
answersArray.add("No Parking"); // 0
answersArray.add("Stop Sign"); // 1
answersArray.add("Yield Sign"); // 2
answersArray.add("Pedestrian Crossing");// 3
answersArray.add("No U Turn"); // 4
answersArray.add("One Way"); // 5
answersArray.add("Speed Limit Sign"); // 6
tagArray.add("No Parking");
tagArray.add("Stop Sign");
tagArray.add("Yield Sign");
tagArray.add("Pedestrian Crossing");
tagArray.add("No U Turn");
tagArray.add("One Way");
tagArray.add("Speed Limit Sign");
button1 = (Button) findViewById(R.id.button1);
button1.setText(answersArray.get(answer1));
button2 = (Button) findViewById(R.id.button2);
button2.setText(answersArray.get(answer2));
button3 = (Button) findViewById(R.id.button3);
button3.setText(answersArray.get(answer3));
button4 = (Button) findViewById(R.id.button4);
button4.setText(answersArray.get(answer4));
button5 = (Button) findViewById(R.id.button5);
button5.setText(answersArray.get(answer5));
button6 = (Button) findViewById(R.id.button6);
button6.setText(answersArray.get(answer6));
button7 = (Button) findViewById(R.id.button7);
button7.setText(answersArray.get(answer7));
signImage.setImageResource(R.drawable.stop_sign);
signImage.setTag("Stop Sign");
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (signImage.getTag() == button1.getText()) {
Toast.makeText(MainActivity.this, "Correct", Toast.LENGTH_SHORT).show();
NextPicture();
} else {
Toast.makeText(MainActivity.this, "Wrongo!", Toast.LENGTH_SHORT).show();
}
}
}); // end button1 onClickListener
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (signImage.getTag() == button2.getText()) {
Toast.makeText(MainActivity.this, "Correct", Toast.LENGTH_SHORT).show();
NextPicture();
} else {
Toast.makeText(MainActivity.this, "Wrongo!", Toast.LENGTH_SHORT).show();
}
}
}); // end button2 onClickListener
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (signImage.getTag() == button3.getText()) {
Toast.makeText(MainActivity.this, "Correct", Toast.LENGTH_SHORT).show();
NextPicture();
} else {
Toast.makeText(MainActivity.this, "Wrongo!", Toast.LENGTH_SHORT).show();
}
}
}); // end button3 onClickListener
button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (signImage.getTag() == button4.getText()) {
Toast.makeText(MainActivity.this, "Correct", Toast.LENGTH_SHORT).show();
NextPicture();
} else {
Toast.makeText(MainActivity.this, "Wrongo!", Toast.LENGTH_SHORT).show();
}
}
}); // end button4 onClickListener
button5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (signImage.getTag() == button5.getText()) {
Toast.makeText(MainActivity.this, "Correct", Toast.LENGTH_SHORT).show();
NextPicture();
} else {
Toast.makeText(MainActivity.this, "Wrongo!", Toast.LENGTH_SHORT).show();
}
}
}); // end button5 onClickListener
button6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (signImage.getTag() == button6.getText()) {
Toast.makeText(MainActivity.this, "Correct", Toast.LENGTH_SHORT).show();
NextPicture();
} else {
Toast.makeText(MainActivity.this, "Wrongo!", Toast.LENGTH_SHORT).show();
}
}
}); // end button6 onClickListener
button7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (signImage.getTag() == button7.getText()) {
Toast.makeText(MainActivity.this, "Correct", Toast.LENGTH_SHORT).show();
NextPicture();
} else {
Toast.makeText(MainActivity.this, "Wrongo!", Toast.LENGTH_SHORT).show();
}
}
}); // end button7 onClickListener
}
public void NextPicture() {
int[] signsArray = { R.drawable.no_parking, R.drawable.no_u_turn_sign, R.drawable.one_way_sign,
R.drawable.pedestrian_crossing, R.drawable.speed_limit_sign, R.drawable.stop_sign,
R.drawable.yield_sign };
signImage.setImageResource(signsArray[randomPicIndex]);
signImage.setTag(tagArray.get(randomPicIndex));
}
}
It doesn't look like you are ever changing your random index. 看起来您从未更改过随机索引。 You need to add
randomPicIndex = random.nextInt(7);
您需要添加
randomPicIndex = random.nextInt(7);
to your NextPicture()
. 到您的
NextPicture()
。 Also, you can't compare strings with ==
. 同样,您不能将字符串与
==
进行比较。 Use .equals()
instead. 使用
.equals()
代替。
public void NextPicture() {
int[] signsArray = { R.drawable.no_parking, R.drawable.no_u_turn_sign, R.drawable.one_way_sign,
R.drawable.pedestrian_crossing, R.drawable.speed_limit_sign, R.drawable.stop_sign,
R.drawable.yield_sign };
randomPicIndex = random.nextInt(7);
signImage.setImageResource(signsArray[randomPicIndex]);
signImage.setTag(tagArray.get(randomPicIndex));
}
To simplify everything assign the same click listener to each button since they all follow the same logic. 为了简化所有操作,因为每个按钮都遵循相同的逻辑,所以为每个按钮分配相同的单击侦听器。
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (((String) signImage.getTag()).equals(((Button) v).getText())) {
Toast.makeText(MainActivity.this, "Correct", Toast.LENGTH_SHORT).show();
NextPicture();
} else {
Toast.makeText(MainActivity.this, "Wrongo!", Toast.LENGTH_SHORT).show();
}
}
};
button1.setOnClickListener(listener);
button2.setOnClickListener(listener);
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.