Установка данных в опциях gridlayout не работает после второго вызова - PullRequest
0 голосов
/ 17 мая 2019

Я работал с ArrayList, используя класс, где я должен поместить его значение в параметры сетки.Первый раз на OnCreate Работало нормально и setText исправляло место Но после вызова класса ВТОРОЕ ВРЕМЯ вылетело. КАК МОЖНО ОДИН РАЗ РАБОТАТЬ С КОДОМ И СРАЗУ В СЛЕДУЮЩИЙ ВРЕМЯ (я думаю, что ошибка в последних строках: -> См. Из урока назад)

public class playGame extends Fragment {
    View view;
    Button option1Button,option2Button,option3Button,option4Button;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle bundle) {
        view=inflater.inflate(R.layout.fragment_play_game, container, false);
        option1Button=view.findViewById(R.id.option1);
        option2Button=view.findViewById(R.id.option2);
        option3Button=view.findViewById(R.id.option3);
        option4Button=view.findViewById(R.id.option4);
        String gameName=getArguments().getString("Name");
        TextView levelNameTextView=view.findViewById(R.id.levelNameTextView);
        levelNameTextView.setText(gameName);
        Button playAgainButton=view.findViewById(R.id.gameOverTry);
        playAgainButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Navigation.findNavController(view).navigate(R.id.action_playGame_to_gameOver);
            }
        });
        final ProcessGame processGame=new ProcessGame();
        GetAndPutData();
        option1Button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                processGame.compareWithCorrect(option1Button.getText().toString());
            }
        });
        option2Button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                processGame.compareWithCorrect(option2Button.getText().toString());
            }
        });
        option3Button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                processGame.compareWithCorrect(option3Button.getText().toString());
            }
        });
        option4Button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                processGame.compareWithCorrect(option4Button.getText().toString());
            }
        });
        return view;
    }
    public class ProcessGame{
        String question,option1,option2,option3,option4,correctAnswer;
        TextView questionBox=view.findViewById(R.id.questionBox);
        List<String> questionlist=new ArrayList<String>();
        public void setValues(String question,String option1,String option2,String option3,String option4,String correctAnswer){
            this.option1=option1;
            this.option2=option2;
            this.option3=option3;
            this.option4=option4;
            this.question=question;
            this.correctAnswer=correctAnswer;
            questionlist.add(0,option1);
            questionlist.add(1,option2);
            questionlist.add(2,option3);
            questionlist.add(3,option4);
            shuffleOption();
            questionBox.setText(question);
        }
        public void shuffleOption(){
            Collections.shuffle(questionlist);
            putOptionsInButton();

        }
        public void putOptionsInButton(){
            option1Button.setText(questionlist.get(0));
            option2Button.setText(questionlist.get(1));
            option3Button.setText(questionlist.get(2));
            option4Button.setText(questionlist.get(3));
        }
        public void compareWithCorrect(String pressedButtonValue){
            TextView feedbackBox=view.findViewById(R.id.feedbackBox);
            if (pressedButtonValue==correctAnswer){
                feedbackBox.setText("Correct :-)");
                GetAndPutData();
            }
            else{
                feedbackBox.setText("Wrong :-(");
                shuffleOption();
            }
        }
    }
    public void GetAndPutData(){
        ProcessGame processGame=new ProcessGame();
        processGame.setValues("1+1=?","2","1","3","4","2");
    }
}

Вот моя ошибка: ->

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
        at java.util.ArrayList.get(ArrayList.java:411)
        at com.example.quiz_createandplay.playGame$ProcessGame.putOptionsInButton(playGame.java:117)
        at com.example.quiz_createandplay.playGame$ProcessGame.shuffleOption(playGame.java:113)

1 Ответ

0 голосов
/ 17 мая 2019

когда ответ правильный, вы вызываете getAndPutData (), который вызывает заданные значения, и именно тогда это приложение работает нормально. Но когда ответ неправильный, вы отправляете его в shuffleOption (), который вызывает putOptionsInButton (), который видит пустой список, вы должны установить DATA в свой список, даже если ответ неправильный, например, если вы вызвали setValues ​​() внутри shuffleOption (), у вас не будет сбоя.

    public void shuffleOption(){
        Collections.shuffle(questionlist);
        processGame.setValues("1+1=?","2","1","3","4","2");
        putOptionsInButton();

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...