android - 测验图像答案

标签 android imagebutton

我正在尝试为自闭症 child 创建一个测验。我想使用图像作为答案或更好,带有图像的按钮像这样 https://gyazo.com/2309e055184a4840c23a07bda0a5bf63 .我的应用程序可以运行,但是当我做测验时,我无法得到正确的答案,只有错误的答案。好像 if 语句不起作用。我想要四个静态答案并且只有 ImageView 有变化。我不知道该怎么办。

public class Category2 extends AppCompatActivity{

    private database2 database2 = new database2();
    private ImageButton imageChoice1,imageChoice2,imageChoice3,imageChoice4;
    ImageView iv_Pic;
    private Button imageAnswerSpace;
    int quizCount = 0;
    int rightAnswerCount = 0;
    private int mAnswer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_category2);

        iv_Pic = (ImageView) findViewById(R.id.iv_Pic);
        imageChoice1 = (ImageButton) findViewById(R.id.imageview1);
        imageChoice2 = (ImageButton) findViewById(R.id.imageview2);
        imageChoice3 = (ImageButton) findViewById(R.id.imageview3);
        imageChoice4 = (ImageButton) findViewById(R.id.imageview4);

        newQ();  

        imageChoice1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {    
                if (v.getId() == R.id.imageview1 && (v.getId() == mAnswer)) {
                    Toast.makeText(Category2.this, "correct", Toast.LENGTH_SHORT).show();
                    newQ();
                } else {
                    Toast.makeText(Category2.this, "wrong", Toast.LENGTH_SHORT).show();
                    newQ();
                }
            }
        });

        imageChoice2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v.getId() == R.id.imageview2 &&  (v.getId()== mAnswer)){
                    Toast.makeText(Category2.this, "correct", Toast.LENGTH_SHORT).show();
                    newQ();
                } else {
                    Toast.makeText(Category2.this, "wrong", Toast.LENGTH_SHORT).show();
                    newQ();
                }
            }
        });

        imageChoice3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v.getId() == R.id.imageview3 && (v.getId()== mAnswer)) {
                    Toast.makeText(Category2.this, "correct", Toast.LENGTH_SHORT).show();    
                    newQ();
                } else {
                    Toast.makeText(Category2.this, "wrong", Toast.LENGTH_SHORT).show();
                    newQ();
                }
            }
        });

        imageChoice4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v.getId() == R.id.imageview4 && (v.getId()== mAnswer)) {
                    Toast.makeText(Category2.this, "correct", Toast.LENGTH_SHORT).show();
                    newQ();
                } else {
                    Toast.makeText(Category2.this, "wrong", Toast.LENGTH_SHORT).show();
                    newQ();
                }
            }
        });
    }

    public void newQ() {

        iv_Pic.setImageResource(database2.getImages(quizCount));

        ImageView changeImage0 = findViewById(R.id.imageview1);
        changeImage0.setImageResource(database2.getChoice1(quizCount));

        ImageView changeImage1 = findViewById(R.id.imageview2);                    
        changeImage1.setImageResource(database2.getChoice2(quizCount));

        ImageView changeImage3 = findViewById(R.id.imageview3);        
        changeImage3.setImageResource(database2.getChoice3(quizCount));

        ImageView changeImage4 = findViewById(R.id.imageview4);
        changeImage4.setImageResource(database2.getChoice4(quizCount));

        mAnswer = database2.getCorrectAnswer(quizCount);

        if (quizCount < 4) {
            quizCount++;
        } else if (quizCount == 4) {
            quizCount = 0;
        }
    }
}

public class database2 {

    private Integer mImages[] = {
        R.drawable.sad,
        R.drawable.happy,
        R.drawable.fear,
        R.drawable.angry,
    };
    public static int mChoices[] [] = {
        {
           R.drawable.ic_angry,
           R.drawable.ic_sad,
           R.drawable.ic_scared,
           R.drawable.ic_smiling
        }, {
           R.drawable.ic_angry,
           R.drawable.ic_sad,
           R.drawable.ic_scared,
           R.drawable.ic_smiling
       }, {
           R.drawable.ic_angry,
           R.drawable.ic_sad,
           R.drawable.ic_scared,
           R.drawable.ic_smiling
        }, {
           R.drawable.ic_angry,
           R.drawable.ic_sad,
           R.drawable.ic_scared,
           R.drawable.ic_smiling
        }
    };

    private Integer mCorrectAnswer[] = {
        R.drawable.ic_sad,
        R.drawable.ic_smiling,
        R.drawable.ic_scared,
        R.drawable.ic_angry
    };

    public Integer getImages(int a){
        Integer image = mImages[a];
        return image;
    }
    public Integer getChoice1(int a){
        int choice0 = mChoices[a][0];
        return choice0;
    }
    public Integer getChoice2(int a){
        int choice1 = mChoices[a][1];
        return choice1;
    }
    public Integer getChoice3(int a){
        int choice2 = mChoices[a][2];
        return choice2;
    }
    public Integer getChoice4(int a){
        int choice3 = mChoices[a][3];
        return choice3;
    }

    public Integer getCorrectAnswer(int a){
        Integer answer = mCorrectAnswer[a];
        return answer;
    }
}

最佳答案

您总是看到“错误”答案的原因是您在 onClick 监听器中将 View ID 与可绘制 ID 进行比较。 v.getId()== mAnswer。 mAnswer 是其中之一

private Integer mCorrectAnswer[] ={
        R.drawable.ic_sad,
        R.drawable.ic_smiling,
        R.drawable.ic_scared,
        R.drawable.ic_angry
};

而 v.getId() 是其中之一

R.id.imageview1
R.id.imageview2
R.id.imageview3
R.id.imageview4

作为短期解决方案,您可以更改 mCorrectAnswer 以使用 ImageView id 而不是 drawable id。然而,这可能难以维护,因此最好使用不依赖于资源 ID 的不同逻辑。

关于android - 测验图像答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52721092/

相关文章:

java - 从通知导航到 Activity 时丢失 Activity 状态

android - ContentProvider getWriteableDatabase 返回 NullPointerException

android - libGDX - 从图像按钮中删除颜色

安卓 : Set padding of image in ImageButton programmatically

java - Android按钮图片抖动动画

android - Android的任何音频降噪技术?

android - 如果我使用颜色作为背景,EditText 尺寸会改变吗?

android - 如何将文本放在 Button 或 ImageButton 下方?

java - imageview和drawables之间的碰撞检测

android - java.lang.RuntimeException : android. os.TransactionTooLargeException:在 fragment 之间导航时数据包大小 558780 字节