简体   繁体   English

应用程序不会在ImageView上随机化下一幅图像,标签Array不会与Imageview同步。 我该如何解决?

[英]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.

相关问题 我想将 json 中的图像作为字符串加载到我的资产中,然后将其传递给 imageview。该怎么做? - I Want to load image from json in my assest as a string and then pass it to an imageview. How to do it? 如何更改 ImageView 中加载的图像? - How do I change an image loaded in ImageView? 如何在javafx中调整imageview图像的大小? - How do I resize an imageview image in javafx? 如何检查imageview中是否有图像,并跳过该图像到下一个imageview - How to check if an imageview has an image in it and skip over the image to the next imageview 如何设置ImageView以显示来自图像URL的图像? - How do i set an ImageView to show an image from an image url? 如何动态更改ImageView(JavaFX)中的图像? - How do I dynamically change the image in an ImageView (JavaFX)? 如何将带有Imageview和TextView的RelativeLayout转换为PNG图像? - How do I convert a RelativeLayout with an Imageview and TextView to a PNG image? 如何获得仅一张图像的缩略图以将其放入ImageView? - How do I get a Thumbnail of only one Image for putting it into an ImageView? 如何在 ImageView 中显示压缩图像并显示其大小? - How do I display the Compressed image in ImageView and display its Size? 如何将 FirestoreDatabase 中的图像加载到 ImageView 中? - How do I load an image from FirestoreDatabase into ImageView?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM