Переменная 'i' доступна из внутреннего класса, должна быть объявлена ​​как final - PullRequest
0 голосов
/ 04 мая 2019

Я пытаюсь отправить значение в другое действие intent.putExtra("doctor",String.valueOf(items.get(i))); , но выдает ошибку. Это " Переменная 'i' доступна из внутреннего класса, должна быть объявлена ​​окончательной ". Код выполняется в цикле for, поэтому я не могу указать окончательное значение, потому что это iterator .

Как мы можем решить это?

Часть кода

for (int i = 0; i < c; i++) {
items.add(options[i]);                            
spinnerDialog=new SpinnerDialog(NewActivity.this,items,"Search","Close");// With No Animation
spinnerDialog=new SpinnerDialog(NewActivity.this,items,"Search",R.style.DialogAnimations_SmileWindow,"Close");// With   Animation

spinnerDialog.setCancellable(true); // for cancellable
spinnerDialog.setShowKeyboard(false);// for open keyboard by default
spinnerDialog.bindOnSpinerListener(new OnSpinerItemClick() {
    @Override
    public void onClick(String item, int position) {
        Intent intent = new Intent(NewActivity.this,PrescriptionActivity.class);
        intent.putExtra("doctor",String.valueOf(items.get(i)));
        NewActivity.this.startActivity(intent);

    }
});
findViewById(R.id.show).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        spinnerDialog.showSpinerDialog();
    }
});

}

1 Ответ

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

Переменные, используемые в реализациях анонимных классов (или лямбда-выражений), должны быть эффективно финальными, иначе произойдет неопределенное поведение.

Я предполагаю, что вы хотите обработать действие щелчка item в позиции, полученной с помощью метода, используя int position, а не из внешнего цикла. Сделайте следующее:

spinnerDialog.bindOnSpinerListener(new OnSpinerItemClick() {
@Override
public void onClick(String item, int position) {
    Intent intent = new Intent(NewActivity.this,PrescriptionActivity.class);
    intent.putExtra("doctor",String.valueOf(items.get(position)));            // here
    NewActivity.this.startActivity(intent);

    }
});
...