首页 > 解决方案 > 无法更改我的测验应用程序的问题

问题描述

我目前正在 android 中制作一个测验应用程序,但我的代码中有一个大问题,那就是它无法根据ArrayList.

假设当我单击ImageButton以检查文本视图是否等于给定单词时,我的代码应该更改问题。但是当我单击时ImageButton不起作用showMeNextQuestion()

这是我的Quiz.java

package com.example.activity.Main;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.speech.tts.TextToSpeech;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.UnderlineSpan;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.TextView;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import com.example.activity.R;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;

public class quiz extends AppCompatActivity{

    private ImageButton imageButton;
    private File soundfile = null;
    private GridView ll;
    private ImageButton imageButton1;
    private final ArrayList<String> buttonList = new ArrayList<>();
    ArrayAdapter<String> adapter;
    private TextView result , text_quiz;
    String lessons,TextCompare,speakTextTxt,tempDestFile ;
    HashMap<String, String> myHashRender = new HashMap<String, String>();
    int qtotal;
    private int counter=0;
    private int cont = 1;
    private int nextStartIndex=1;
    TextView number;
    List<String> word;
    Boolean answered;
    MediaPlayer mMediaPlayer = new MediaPlayer();
    TextToSpeech mTts;
    String word_to_use;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.quiz);
        number = findViewById(R.id.numberss);
        imageButton = findViewById(R.id.icon1);
        result = findViewById(R.id.result);
        imageButton1 = findViewById(R.id.validate);
        text_quiz = findViewById(R.id.text_quiz);
        ll = findViewById(R.id.btnlay);
// ----------------------------------------------------------------------------------------------
        Intent intent1 = getIntent();
        final String ass = intent1.getStringExtra("lesson");
        word = new LinkedList<String>(Arrays.asList(ass.split("_")));
        Collections.shuffle(word);
        qtotal= word.size();

// ----------------------------------------------------------------------------------------------

        word_to_use = showmenextquestion();
        start(word_to_use);
        middle();
        audio();
    }
// end
// ----------------------------------------------------------------------------------------------




    private void start(String word_to_use) {




                    String arr[] = word_to_use.split(" ",2);
                    String fword = arr[0];
                    String rword = arr[1];
                    String reprword = rword.replaceAll("[a-z]", "*");
                    final String text = fword + " " + reprword;
                    SpannableString firstword = new SpannableString(text);
                    firstword.setSpan(new UnderlineSpan(), 0, fword.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                    result.setText(firstword);

                    final String [] display = result.getText().toString().split("\\s");

                    final String[] words = word_to_use.split("\\s");
                    final int noOfBtns = words.length;
                    final Button[] btns = new Button[noOfBtns];
                    for(int i=0;i<noOfBtns;i++)
                    {
                        buttonList.add(words[i]);
                        Collections.shuffle(buttonList);
                        ll.removeAllViewsInLayout();
                        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, buttonList)
                        {
                            @Override
                            public View getView(int position, View convertView, ViewGroup parent) {
                                View row = null;
                                if(convertView == null)
                                {
                                    row = super.getView(position,convertView,parent);
                                    row.setBackgroundResource(R.drawable.btn_background);
                                }

                                return row;
                            }
                        };
                        ll.setAdapter(adapter);

                        ll.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                            public void onItemClick(AdapterView parent, View v, int position, long id) {


                                if(position < noOfBtns) {

                                    String selectedItem = parent.getItemAtPosition(position).toString();
                                    String s2 = text_quiz.getText().toString();
                                    String [] s2_word = s2.split("\\s+");
                                    List<String> str = new LinkedList<String>(Arrays.asList(s2_word));
                                    if(str.remove(selectedItem))
                                    {
                                        StringBuilder builder = new StringBuilder();
                                        for(String details: str)
                                        {
                                            builder.append(details + " ");
                                        }
                                        text_quiz.setText(builder.toString());
                                            v.setBackgroundResource(R.drawable.btn_background);
                                    }else {

                                                v.setBackgroundResource(R.drawable.buttons4);
                                                text_quiz.append(selectedItem + " ");

                                    }
                                }

                                if (cont >= display.length) {
                                    cont = 0;
                                    nextStartIndex = 0;
                                }

                                result.setText(formatText(text, display[cont]));
                                cont++;

                            }
                        });

                }

            }
    private void middle() {
        imageButton1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String answer = showmenextquestion();


                    if(text_quiz.getText().toString().trim().equals(answer.trim()))
                    {

                        final AlertDialog.Builder builder = new AlertDialog.Builder(quiz.this);
                        builder.setTitle("Correct")
                                .setMessage("please click ok to continue until the end")
                                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        dialog.dismiss();
                                        if(counter < qtotal)
                                        {
                                            showmenextquestion();

                                        }
                                        else
                                        {
                                            finish();
                                        }

                                    }
                                }).show();
                    }else
                    {
                        AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
                        builder.setTitle("Incorrect");
                        builder.setMessage("There is no Words.");
                        builder.setCancelable(true);

                        final AlertDialog dlg = builder.create();

                        dlg.show();

                        Handler mHandler = new Handler();
                        Runnable mRunnable = new Runnable () {

                            public void run() {
                                if(dlg != null && dlg.isShowing()) dlg.dismiss();
                            }
                        };
                        mHandler.postDelayed(mRunnable,1500);
                    }
                }

                /*if(TextCompare.compareTo(answer) != 0)
                {
                    new AlertDialog.Builder(quiz.this)
                            .setTitle("Correct")
                            .setMessage("please click ok to continue until the end")
                            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    text_quiz.setText("");
                                    ll.removeAllViewsInLayout();
                                    start();
                                    dialog.dismiss();
                                }
                            }).show();

                }else
                {
                    AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
                    builder.setTitle("Incorrect");
                    builder.setMessage("Your Answer is Incorrect.");
                    builder.setCancelable(true);

                    final AlertDialog dlg = builder.create();

                    dlg.show();

                    Handler mHandler = new Handler();
                    Runnable mRunnable = new Runnable () {

                        public void run() {
                            if(dlg != null && dlg.isShowing()) dlg.dismiss();
                        }
                    };
                    mHandler.postDelayed(mRunnable,2000);
                    text_quiz.setText("");
                }*/

        });
    }
    private void audio() {

        speakTextTxt = showmenextquestion();
        myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, speakTextTxt);

        String exStoragePath = "";
        File appTmpPath = new File("/storage/emulated/0/Android/data/");
        boolean isDirectoryCreated = appTmpPath.mkdir();
        Log.d("MainActivity", "directory " + appTmpPath + " is created : " + isDirectoryCreated);
        String tempFilename = "tts.wav";
        tempDestFile = appTmpPath.getAbsolutePath() + File.separator + tempFilename;
        Log.d("MainActivity", "tempDestFile : " + tempDestFile);
        new MySpeech(speakTextTxt);

        imageButton.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.M)
            @Override
            public void onClick(View v) {
                final String path = "/storage/emulated/0/Android/data/tts.wav";
                try {
                    mMediaPlayer.setDataSource(path);
                } catch (IllegalArgumentException e1) {
                    e1.printStackTrace();
                } catch (IllegalStateException e1) {
                    e1.printStackTrace();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
                try {
                    mMediaPlayer.prepare();
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                mMediaPlayer.setLooping(true);
                if(!mMediaPlayer.isPlaying())
                {
                    v.setBackgroundResource(R.drawable.ic_image_play);
                    mMediaPlayer.start();
                }
                else
                {
                    v.setBackgroundResource(R.drawable.ic_stop_black);
                    mMediaPlayer.pause();
                }
            }
        });

    }
    private String showmenextquestion() {
        counter = 1;
        if(counter < qtotal)
        {

                lessons = word.get(counter);
                TextCompare = word.get(counter);
                number.setText(counter + "/" + qtotal);

                counter++;

        }
        return lessons;
    }

    class MySpeech implements TextToSpeech.OnInitListener {

        String tts;

        public MySpeech(String tts)
        {
            this.tts = tts;
            mTts = new TextToSpeech(quiz.this, this);
        }

        @Override
        public void onInit(int status)
        {
            Log.v("log", "initi");
            int i = mTts.synthesizeToFile(speakTextTxt, myHashRender, tempDestFile);
        }
    }
    public CharSequence formatText(String base, String highlight) {
        int start = base.indexOf(highlight,nextStartIndex);
        nextStartIndex = start+highlight.length();
        SpannableString span = new SpannableString(base);
        if (start >= 0) {

            span.setSpan(new UnderlineSpan(), start, nextStartIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            return span;

        }

        return base;
    }

    @Override
    public void onBackPressed() {
        mMediaPlayer.stop();
       showmenextquestion();
    }
}

现在这是我的quiz.xml

    <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/faded_background2"
    tools:context=".Main.quiz">

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline_left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_begin="24dp" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline_right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_end="24dp" />


    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/top1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        app:layout_constraintBottom_toTopOf="@id/top2"
        app:layout_constraintEnd_toEndOf="@id/guideline_right"
        app:layout_constraintStart_toStartOf="@id/guideline_left"
        app:layout_constraintTop_toTopOf="parent">

        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guide_left_inside_top1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_begin="550dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            />

        <TextView
            android:id="@+id/numberss"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:padding="5dp"
            android:gravity="center"
            android:text="0/30"
            android:textColor="#000000"
            android:textSize="25sp"
            android:textStyle="bold"
            app:layout_constraintStart_toStartOf="@id/guide_left_inside_top1"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            />
    </androidx.constraintlayout.widget.ConstraintLayout>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/top2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@drawable/buttons2"
        app:layout_constraintBottom_toTopOf="@+id/text_quiz"
        app:layout_constraintEnd_toEndOf="@id/guideline_right"
        app:layout_constraintStart_toStartOf="@id/guideline_left"
app:layout_constraintTop_toBottomOf="@id/top1"
        app:layout_constraintVertical_bias="0.144">

        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guide_left_inside_constraint"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_begin="90dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            />
        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guide_right_inside_constraint"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_end="30dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            />

        <ImageButton
            android:id="@+id/icon1"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:layout_gravity="center"
            android:background="@drawable/buttons2"
            android:src="@drawable/ic_image_play"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="@id/guide_left_inside_constraint"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.0" />


        <TextView
            android:id="@+id/result"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:padding="5dp"
            android:gravity="center"
            android:text="TextView"
            android:textColor="@color/palette1"
            android:textSize="25sp"
            android:textStyle="bold"
            app:layout_constraintStart_toStartOf="@id/guide_left_inside_constraint"
            app:layout_constraintEnd_toEndOf="@id/guide_right_inside_constraint"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            />

    </androidx.constraintlayout.widget.ConstraintLayout>
    <TextView
        android:id="@+id/text_quiz"
        android:layout_width="0dp"
        android:background="@drawable/buttons1"
        android:layout_height="wrap_content"
        android:padding="16dp"
        android:textColor="@color/palette1"
        android:gravity="center"
        android:textSize="20sp"
        android:textStyle="bold"
        android:layout_marginTop="10dp"
        app:layout_constraintStart_toStartOf="@id/guideline_left"
        app:layout_constraintEnd_toStartOf="@id/guideline_right"
        app:layout_constraintTop_toBottomOf="@+id/top2"/>

    <GridView
        android:id="@+id/btnlay"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:columnWidth="100dp"
        android:gravity="center"
        android:horizontalSpacing="16dp"
        android:numColumns="7"
        android:stretchMode="spacingWidthUniform"
        android:verticalSpacing="16dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/text_quiz"
        app:layout_constraintBottom_toTopOf="@id/footer_line"/>

    <View
        android:id="@+id/footer_line"
        android:layout_width="0dp"
        android:layout_height="1dp"
        android:layout_marginBottom="50dp"
        android:background="#000000"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        />

    <ImageButton
        android:id="@+id/validate"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_check"
        android:layout_marginTop="15dp"
        android:background="@color/login_light"
        app:layout_constraintStart_toStartOf="@id/guideline_left"
        app:layout_constraintEnd_toStartOf="@id/guideline_right"
        app:layout_constraintTop_toBottomOf="@+id/footer_line"
        />
    <!--


        />



    -->

</androidx.constraintlayout.widget.ConstraintLayout>






<!--
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Main.quiz">


    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:paddingTop="50sp"
            android:paddingLeft="20sp"
            android:paddingRight="20sp">


            <androidx.constraintlayout.widget.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/round_corners">

                <ImageButton
                    android:id="@+id/icon1"
                    android:layout_width="80dp"
                    android:layout_height="80dp"
                    android:layout_gravity="center"
                    android:background="@drawable/round_corners"
                    android:src="@drawable/ic_image_play"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintHorizontal_bias="0.0"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintVertical_bias="0.0" />

                <TextView
                    android:id="@+id/text_quess"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:gravity="center"
                    android:text="TextView"
                    android:textColor="@color/p10"
                    android:textSize="25sp"
                    android:textStyle="bold"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintHorizontal_bias="0.269"
                    app:layout_constraintStart_toEndOf="@+id/icon1"
                    app:layout_constraintTop_toTopOf="parent" />

            </androidx.constraintlayout.widget.ConstraintLayout>

            <Button
                android:id="@+id/text_quiz"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:layout_marginTop="10dp"
                android:background="@drawable/round_corners2"
                android:text="TextView"
                android:textStyle="bold"
                android:textSize="25sp"
                android:textColor="@color/p10"
                android:layout_gravity="center"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@drawable/round_corners3"
            android:layout_marginTop="35sp">
        </LinearLayout>
    </ScrollView>


</androidx.constraintlayout.widget.ConstraintLayout>-->

我的 xml 布局是横向的。请帮忙。谢谢你。

标签: javaandroid

解决方案


变量 counter 的值在 if 循环中递增,但是当showmenextquestion()调用该函数时,计数器值再次分配给 1。所以它总是只显示第一个问题。因此,请使用该counter=1;函数的外部,即放置counter=1;start()oraudio() 函数中。因此,每当应用程序启动时,计数器值将为 1,并且在showmenextquestion()调用该函数时它会递增。

private String showmenextquestion() {
    if(counter < qtotal)
    {

            lessons = word.get(counter);
            TextCompare = word.get(counter);
            number.setText(counter + "/" + qtotal);

            counter++;

    }
    return lessons;
}

推荐阅读