Невозможно использовать переменные во внутренних классах

В настоящее время я работаю над игрой-викториной в Android Studio, и мне трудно решить ошибки, вызванные использованием переменных внешнего класса во внутреннем классе кнопки OnClickListener. Мне нужно использовать эти переменные, чтобы указать индекс массива для вопросов, вариантов и ответов.

Вот код

import android.content.Intent;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class info extends AppCompatActivity {

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

    String [] questionsIT = {
            "When did Windows 10 appear?",
            "When did the first iPhone appear?",
            "Who presented the iPhone 4?",
            "What's the most widely used browser in the world?",
            "Which language is Windows written in?",
            "WHich country did the inventor of PHP language come from?",
            "How many cores does a quad-core processor have?",
            "Which company owns XBOX?",
            "Which company owns PlayStation?",
            "In which american state are the Google headquarters located?"
    };

    String [][] choicesIT = {
            {"1989", "2015", "2002", "2012"},
            {"1999", "2006", "2008", "2007"},
            {"Steve Jobs", "Tim Cook", "Bill Gates", "Steve Wozniak"},
            {"Microsoft Edge", "Internet Explorer", "Google Chrome", "Mozzila Firefox"},
            {"C++", "Pascal", "Java", "Perl"},
            {"Romania", "UK", "Greenland", "Germany"},
            {"2 cores", "4 cores", "6 cores", "8 cores"},
            {"Google", "Sony", "Samsung", "Microsoft"},
            {"Microsoft", "Sony", "Apple", "Nokia"},
            {"New York", "Texas", "Ohio", "California"}
    };

    final String [] answersIT = {
            "2015",
            "2007",
            "Steve Jobs",
            "Google Chrome",
            "C++",
            "Greenland",
            "4 cores",
            "Microsoft",
            "Sony",
            "California"
    };

    int[] picsID = {R.drawable.win10, R.drawable.iphone1, R.drawable.apple};

    RelativeLayout rlinfo = findViewById(R.id.rlinfo);    //se alege layout si se init var pt intrb
    TextView intrbinfo = findViewById(R.id.intrbinfo);
    Button ch1 = findViewById(R.id.ch1);
    Button ch2 = findViewById(R.id.ch2);
    Button ch3 = findViewById(R.id.ch3);
    Button ch4 = findViewById(R.id.ch4);

    final Button[] chooses = new Button[]{ch1, ch2, ch3, ch4};
    for(i = 0; i<10; i++)
    {
        intrbinfo.setText(questionsIT[i]);
        chooses[0].setText(choicesIT[i][0]);
        chooses[1].setText(choicesIT[i][1]);
        chooses[2].setText(choicesIT[i][2]);
        chooses[3].setText(choicesIT[i][3]);

        chooses[0].setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (chooses[0].getText().equals(answersIT[i]))
                {
                    Right(v);
                    score++;
                }
            }
        });

    }



}

public void Right(View v)
{

}

public void Wrong(View v2)
{

}

}

Вы не сказали, какие ошибки получили.

Mike Harris 22.10.2018 17:26

Вероятно, вам потребуется использовать переменную final или effectively final.

Sedrick 22.10.2018 17:31

Боковая панель: вместо использования нескольких массивов и сопоставления вопросов / вариантов / ответов по индексу я бы предложил создать объект вопроса с полями для вопросов, вариантов выбора и ответов. Таким образом, вам понадобится только один массив вопросов, и он будет намного более чистым.

RobOhRob 22.10.2018 17:40

Я не совсем понимаю о чем ты говоришь

Anghel Iulian 22.10.2018 17:52
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
51
0

Другие вопросы по теме