首页 > 解决方案 > 如何在多项选择活动中更改问题并将分数传递给下一个活动

问题描述

我正在开发一个Retrofit用于解析问题数组的测验应用程序。有 10 个问题,每个问题有 4 个选项(单选按钮),如果单击“下一步”按钮,这些选项将被更改。当按钮被点击时,它应该保存用户的答案,如果答案是正确的,分数应该增加 10 分。用户回答完所有问题后,总分应显示在下一个活动中。

我已经在寻找参考资料,但我仍然对单击“下一步”按钮时如何设置更改的文本并在我的项目中同时存储用户的答案和计算分数感到困惑。

这是我的 JSON 响应

{
    "error": false,
    "status": "success",
    "result": [
        {
            "id": 96,
            "description": "Meyakini dalam hati, mengucapkan dengan lisan, dan mengamalkan dalam kehidupan sehari-hari adalah arti dari . . . .",
            "A": "iman",
            "B": "islam",
            "C": "ihsan",
            "D": "takwa",
            "Answer": "iman",
            "discussion": "Iman kepada Allah Swt. adalah percaya dengan sepenuh hati bahwa Dia itu ada, diucapkan dengan lisan, dan diamalkan dalam perbuatan sehari-hari."
        },
        {
            "id": 97,
            "description": "Fatimah disuruh membeli minyak goreng di sebuah warung. Ketika menerima uang kembalian, ia tahu bahwa jumlahnya lebih dari seharusnya, lalu ia mengembalikannya. Ia sadar bahwa Allah Swt. selalu mengawasi perbuatannya, karena Allah Swt. bersifat . . . .",
            "A": "al-'Aliim",
            "B": "al-Khabiir",
            "C": "as-Samii'",
            "D": "al-Basiir",
            "Answer": "al-Basiir",
            "discussion": "Allah Maha Mengawasi yang berarti juga Allah Maha Melihat (al_Basiir)."
        },
        {
            "id": 98,
            "description": "Subhanallah, indahnya alam semesta dengan segala isinya. Semuanya tercipta dengan teratur dan seimbang. Fenomena alam tersebut merupakan bukti bahwa Allah Maha . . . .",
            "A": "mengetahui",
            "B": "teliti",
            "C": "mendengar",
            "D": "melihat",
            "Answer": "teliti",
            "discussion": "Semuanya tercipta dengan teratur dan seimbang yang berarti Allah Maha Teliti."
        },
        {
            "id": 99,
            "description": "Hasan selalu berhati-hati dalam setiap ucapan dan perbuatannya, karena ia yakin bahwa Allah Swt. senantiasa mendengarnya. Perbuatan tersebut merupakan pengamalan dari keyakinannya bahwa Allah Swt. bersifat . . . .",
            "A": "al-'Aliim",
            "B": "al-Khabiir",
            "C": "as-Samii'",
            "D": "al-Basiir",
            "Answer": "as-Samii'",
            "discussion": "Allah Swt. senantiasa mendengarnya yang berarti Allah Maha Mendengar (as-Samii')."
        },
        {
            "id": 100,
            "description": "Di antara bentuk pengamalan dari keyakinan terhadap al-'Aliim adalah . . . .",
            "A": "rajin dalam menimba ilmu",
            "B": "berusaha menghindari kemungkaran",
            "C": "bersikap dermawan kepada sesama",
            "D": "bersikap pemaaf kepada sesama",
            "Answer": "rajin dalam menimba ilmu",
            "discussion": "Allah Swt. sangat menyukai orang yang rajin mencari ilmu pengetahuan dan mengamalkannya"
        },
        {
            "id": 101,
            "description": "Allah Swt. sendirilah yang mengetahui kapan terjadinya hari kiamat, mengetahui apa yang terkandung di dalam rahim, mengetahui kapan akan turun hujan. Allah Swt. Maha Mengetahui merupakan makna dari . . . .",
            "A": "al-'Aliim",
            "B": "al-Khabiir",
            "C": "as-Samii'",
            "D": "al-Basiir",
            "Answer": "al-'Aliim",
            "discussion": "Dari kasus di atas berarti Allah Maha Mengetahui (al-'Aliim)."
        },
        {
            "id": 102,
            "description": "Di antara bentuk pengamalan dari keyakinan terhadap al-Khabiir adalah . . . .",
            "A": "suka berbagi pengalaman dan pengetahuan",
            "B": "senang menolong orang yang sedang susah",
            "C": "menjadi suri teladan bagi orang lain",
            "D": "bersemangat dan kreatif dalam segala hal",
            "Answer": "bersemangat dan kreatif dalam segala hal",
            "discussion": "Allah Swt. menciptakan milyaran makhluk dengan berbagai ragamnya. Semuanya diketahui oleh Allah dengan detail, penuh kecermatan dan kewaspadaan, baik secara lahir maupun batin."
        },
        {
            "id": 103,
            "description": "Allah Swt. Maha Mendengar suara apa pun yang ada di alam semesta ini. Pendengaran Allah tidak terbatas, tidak ada satu pun suara yang lepas dari pendengaran-Nya. Allah Swt. Maha Mendengar merupakan makna dari . . . .",
            "A": "al-'Aliim",
            "B": "al-Khabiir",
            "C": "as-Samii'",
            "D": "al-Basiir",
            "Answer": "as-Samii'",
            "discussion": "Allah Maha Mendengar atau disebut juga dengan as-Samii'."
        },
        {
            "id": 104,
            "description": "Allah Swt. Maha Melihat segala sesuatu walaupun lembut dan kecil. Allah Swt. pun melihat apa yang ada di bumi dan di langit. Allah Maha Melihat merupakan makna . . . .",
            "A": "al-'Aliim",
            "B": "al-Khabiir",
            "C": "as-Samii'",
            "D": "al-Basiir",
            "Answer": "al-Basiir",
            "discussion": "Allah Maha Melihat atau disebut juga dengan al-Basiir."
        },
        {
            "id": 105,
            "description": "Di antara bentuk pengamalan dari keyakinan terhadap al-Basiir adalah . . . .",
            "A": "introspeksi diri untuk kebaikan",
            "B": "introspeksi diri untuk kebaikan",
            "C": "amar ma’ruf nahi munkar",
            "D": "menjadi suri tauladan bagi orang lain",
            "Answer": "introspeksi diri untuk kebaikan",
            "discussion": "Kita diharuskan selalu introspeksi diri untuk melihat kelebihan dan kekurangan kita sendiri agar hidup menjadi lebih terarah, ini merupakan salah satu pengalaman dari al-Basiir"
        }
    ]
}

我对应的模型类

public class Task {
    @SerializedName("id")
    @Expose
    private int id_soal;

    @SerializedName("description")
    @Expose
    private String soal;

    @SerializedName("A")
    @Expose
    private String option_A;

    @SerializedName("B")
    @Expose
    private String option_B;

    @SerializedName("C")
    @Expose
    private String option_C;

    @SerializedName("D")
    @Expose
    private String option_D;

    @SerializedName("Answer")
    @Expose
    private String jawaban;

    @SerializedName("discussion")
    @Expose
    private String pembahasan;

    public Task(int id_soal, String soal, String option_A, String option_B, String option_C, String option_D, String jawaban, String pembahasan) {
        this.id_soal = id_soal;
        this.soal = soal;
        this.option_A = option_A;
        this.option_B = option_B;
        this.option_C = option_C;
        this.option_D = option_D;
        this.jawaban = jawaban;
        this.pembahasan = pembahasan;
    }

还有我的 TaskActivity

public class TaskActivity extends AppCompatActivity {

    private ArrayList<Task> tasks;
    TextView task_question;
    RadioGroup choices_group;
    RadioButton choice_A, choice_B, choice_C, choice_D;
    Button next, previous;

    ProgressDialog loading;
    Token auth = PreferencesConfig.getInstance(this).getToken();
    String token = "Bearer " + auth.getToken();

    int score;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_banksoal_test);

        task_question = findViewById(R.id.pertanyaan);
        choices_group = findViewById(R.id.rg_question);
        choice_A = findViewById(R.id.option_A);
        choice_B = findViewById(R.id.option_B);
        choice_C = findViewById(R.id.option_C);
        choice_D = findViewById(R.id.option_D);
        next = findViewById(R.id.bNext);
        previous = findViewById(R.id.bPrevious);

        next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //????????
            }
        });

    }

    @Override
    protected void onResume() {
        super.onResume();
        alert_start();
    }

    public void alert_start(){
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
        alertDialog.setMessage("Mulai?");
        alertDialog.setNegativeButton("Jangan dulu, saya belum siap!", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Intent intent = new Intent(TaskActivity.this, BanksoalShelvesActivity.class);
                startActivity(intent);
            }
        });
        alertDialog.setPositiveButton("Ayo, dimulai!", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                task();
                dialog.dismiss();
            }
        });
        AlertDialog alert = alertDialog.create();
        alert.show();
    }

    public void task(){

        loading = ProgressDialog.show(this, null, "Please wait...",true, false);

        Intent intent = getIntent();
        final int task_id = intent.getIntExtra("task_id", 0);
        int classes = intent.getIntExtra("task_class", 0);

        Call<ResponseTask> call = RetrofitClient
                .getInstance()
                .getApi()
                .taskmaster_task(token, task_id, classes);

        call.enqueue(new Callback<ResponseTask>() {
            @Override
            public void onResponse(Call<ResponseTask> call, Response<ResponseTask> response) {
                loading.dismiss();
                ResponseTask responseTask = response.body();
                Log.d("TAG", "Response " + response.body());
                if (response.isSuccessful()){
                    if (responseTask.getStatus().equals("success")){
                        Log.i("debug", "onResponse : SUCCESSFUL");
                        tasks = responseTask.getTasks();
                        showQuestion();
                    }else {
                        Log.i("debug", "onResponse : FAILED");
                    }
                }
            }

            @Override
            public void onFailure(Call<ResponseTask> call, Throwable t) {
                Log.e("debug", "onFailure: ERROR > " + t.getMessage());
                loading.dismiss();
                Toast.makeText(TaskActivity.this, "Kesalahan terjadi.", Toast.LENGTH_LONG).show();
            }
        });
    }

    public void showQuestion(){
        for (int i = 0; i < tasks.size(); i++){
            task_question.setText(tasks.get(i).getSoal());
            choice_A.setText(tasks.get(i).getOption_A());
            choice_B.setText(tasks.get(i).getOption_B());
            choice_C.setText(tasks.get(i).getOption_C());
            choice_D.setText(tasks.get(i).getOption_D());
        }
    }
}

标签: javaandroidandroid-activityradio-button

解决方案


首先,您需要存储 currentTaskId:

private int currentTaskId = 0;

然后你应该在你的变量中加载收到的任务:

tasks = responseTask.getTasks();
loadQuestion();

在 TaskActivity 的某个地方,您需要编写这个向用户显示问题的方法:

private void loadQuestion(){
   Task task = tasks.get(currentTaskId);
   task_question.setText(task.getSoal());
   choice_A.setText(task.getOption_A());
   choice_B.setText(task.getOption_B());
   choice_C.setText(task.getOption_C());
   choice_D.setText(task.getOption_D());
   next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //check task answer, if task was answered correct than score+=10
            if(currentTaskId<tasks.size()){
               currentTaskId++;
               loadQuestion();
            } else {
               //open new activity
            }
        }
    });
    previous.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(currentTaskId>0){
               currentTaskId--;
               loadQuestion();
            } else {
               //do nothing as we are already on the first question
            }
        }
    });
}

推荐阅读