简体   繁体   English

Arraylist Android

[英]Arraylist android

I am making a quiz application and using the ArrayList with. 我正在做一个测验应用程序,并使用ArrayList I have a problem with the Answers: it is working when I have just one answer, but what can I do if the question has two answers? 我的答案有问题:当我只有一个答案时,它就可以工作,但是如果这个问题有两个答案,该怎么办?

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;

import java.util.ArrayList;

import cn.pedant.SweetAlert.SweetAlertDialog;

public class MainActivity extends AppCompatActivity {

    TextView questionLabel, questionCountLabel, scoreLabel;
    EditText answerEdt;
    Button submitButton;
    ProgressBar progressBar;
    ArrayList<QuestionModel> questionModelArraylist;


    int currentPosition = 0;
    int numberOfCorrectAnswer = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        questionCountLabel = findViewById(R.id.noQuestion);
        questionLabel = findViewById(R.id.question);
        scoreLabel = findViewById(R.id.score);

        answerEdt = findViewById(R.id.answer);
        submitButton = findViewById(R.id.submit);
        progressBar = findViewById(R.id.progress);

        questionModelArraylist = new ArrayList<>();

        setUpQuestion();

        setData();

        submitButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                checkAnswer();
            }
        });

        answerEdt.setOnKeyListener(new View.OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                // If the event is a key-down event on the "enter" button
                Log.e("event.getAction()",event.getAction()+"");
                Log.e("event.keyCode()",keyCode+"");
                if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                        (keyCode == KeyEvent.KEYCODE_ENTER)) {

                    checkAnswer();
                    return true;
                }
                return false;
            }
        });

    }
    public void checkAnswer(){
        String answerString  = answerEdt.getText().toString().trim();




        if(answerString.equalsIgnoreCase(questionModelArraylist.get(currentPosition).getAnswer())){
            numberOfCorrectAnswer ++;



            new SweetAlertDialog(MainActivity.this, SweetAlertDialog.SUCCESS_TYPE)
                    .setTitleText("Sehr gut!")
                    .setContentText("Richtig!")
                    .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sweetAlertDialog) {
                            currentPosition ++;

                            setData();
                            answerEdt.setText("");
                            sweetAlertDialog.dismiss();
                        }
                    })
                    .show();


        }else {

            new SweetAlertDialog(MainActivity.this, SweetAlertDialog.ERROR_TYPE)
                    .setTitleText("Falsch :(")
                    .setContentText("Die Richtige Antwort ist : "+questionModelArraylist.get(currentPosition).getAnswer())
                    .setConfirmText("OK")
                    .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sDialog) {
                            sDialog.dismiss();

                            currentPosition ++;

                            setData();
                            answerEdt.setText("");
                        }
                    })
                    .show();
        }





        int x = ((currentPosition+1) * 100) / questionModelArraylist.size();

        progressBar.setProgress(x);



    }




    public void setUpQuestion(){


        questionModelArraylist.add(new QuestionModel("Write one planet located between Earth and the sun?", " Mercury or Venus"));
    }

    public void setData(){


        if(questionModelArraylist.size()>currentPosition) {

            questionLabel.setText(questionModelArraylist.get(currentPosition).getQuestionString());

            scoreLabel.setText("Ergebnis :" + numberOfCorrectAnswer + "/" + questionModelArraylist.size());
            questionCountLabel.setText("Frage Nummer : " + (currentPosition + 1));


        }else{


            new SweetAlertDialog(MainActivity.this, SweetAlertDialog.SUCCESS_TYPE)
                    .setTitleText("Du bist Fertig :)")
                    .setContentText("dein Ergebnis ist : "+ numberOfCorrectAnswer + "/" + questionModelArraylist.size())
                    .setConfirmText("Wiederholen")
                    .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sDialog) {

                            sDialog.dismissWithAnimation();
                            currentPosition = 0;
                            numberOfCorrectAnswer = 0;
                            progressBar.setProgress(0);
                            setData();
                        }
                    })
                    .setCancelText("schließen")
                    .setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sDialog) {

                            sDialog.dismissWithAnimation();
                            finish();
                        }
                    })
                    .show();

        }

    }



}

Question Class 问题类别

public class QuestionModel {

    public QuestionModel(String questionString, String answer) {
        QuestionString = questionString;
        Answer = answer;
    }

    public String getQuestionString() {
        return QuestionString;
    }

    public void setQuestionString(String questionString) {
        QuestionString = questionString;
    }

    public String getAnswer() {
        return Answer;
    }

    public void setAnswer(String answer) {
        Answer = answer;
    }

    private String QuestionString;
    private String Answer;


}

As you can see, I want to make the answer to be Mercury or Venus , but I can't make it work. 如您所见,我想给出的答案是MercuryVenus ,但我无法使其正常工作。 Thank you. 谢谢。

Ok so it appears you have an ArrayList of Questions. 好的,看来您有一个问题的ArrayList。 Each question appears to have a property of answers. 每个问题似乎都有答案的性质。 My answer is a bit of a shortcut, you are going to want to add the actual String "Venus" to your questions property. 我的答案有点捷径,您将要在您的问题属性中添加实际的字符串“ Venus”。

Also I turned your String into a more readable String 我也把你的字符串变成了更易读的字符串

The || || operator means "or" in Java/Android 运算符在Java / Android中表示“或”

String mercuryString= questionModelArraylist.get(currentPosition).getAnswer() 字符串mercuryString = questionModelArraylist.get(currentPosition).getAnswer()

if(answerString.equalsIgnoreCase(mercuryString) || 
answerString.equalsIgnoreCase("Venus"){

 numberOfCorrectAnswer ++;
    }

What you can do is while creating the object for QuestionModel send the ArrayList for the answers 您可以做的是在为QuestionModel创建对象时,将ArrayList发送给答案

QuestionModel object=new QuestionModel("Write one planet located between Earth and the sun?", arraylist for answers)

when you call getAnswer() method in checkAnswer() method it will give you the ArrayList of answer for that particular question and then you can use 当您在checkAnswer()方法中调用getAnswer()方法时,它将为您提供该特定问题的答案的ArrayList,然后您可以使用

 if (answerlist.contains("Mercury") && answerlist.contains("Venus"){
 //insert your logic for correct answer
}

then you can match the two or more answer 那么您可以匹配两个或多个答案

your model class will be like 你的模型课就像

public class QuestionModel {

private String QuestionString;
private ArrayList<String> Answer;

public QuestionModel(String questionString, ArrayList answer) {
    QuestionString = questionString;
    Answer = answer;
}

public String getQuestionString() {
    return QuestionString;
}

public void setQuestionString(String questionString) {
    QuestionString = questionString;
}

public ArrayList getAnswer() {
    return Answer;
}

public void setAnswer(ArrayList answer) {
    Answer = answer;
}

} }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM