Java 变量';i';是从内部类中访问的,需要声明为final

Java 变量';i';是从内部类中访问的,需要声明为final,java,android,inner-classes,final,Java,Android,Inner Classes,Final,我试图将值发送到另一个活动intent.putExtra(“医生”,String.valueOf(items.get(I)); 但它给出了错误。也就是说“变量'i'是从内部类中访问的,需要声明为final”。代码在for循环中运行,因此我无法给出最终值,因为它是迭代器 我们如何解决这个问题 部分代码 for (int i = 0; i < c; i++) { items.add(options[i]); spinnerDialog=n

我试图将值发送到另一个活动
intent.putExtra(“医生”,String.valueOf(items.get(I));
但它给出了错误。也就是说“变量'i'是从内部类中访问的,需要声明为final”。代码在for循环中运行,因此我无法给出最终值,因为它是迭代器

我们如何解决这个问题

部分代码

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();
    }
});
for(int i=0;i

}

匿名类实现(或lambda表达式)中使用的变量必须是有效的final,否则将发生未定义的行为

我假设您希望在使用
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);

    }
});

position
代替
i
我怎么没看到它!谢谢,它能工作。
final int j=i
然后
get(j)
也会起作用。但是使用
位置
更好。