【问题标题】:Variable 'i' is accessed from within inner class, needs to be declared final从内部类中访问变量“i”,需要声明为 final
【发布时间】:2019-09-22 10:55:50
【问题描述】:

我正在尝试将值发送到另一个活动intent.putExtra("doctor",String.valueOf(items.get(i))); ,但它给出了错误。那就是“变量'i'是从内部类中访问的,需要声明为final”。代码在 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();
    }
});

}

【问题讨论】:

  • 使用position 而不是i
  • 我怎么没看到!谢谢,它有效。
  • final int j = i; 然后get(j) 也可以。但是使用position 更好。

标签: java android inner-classes final


【解决方案1】:

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

我想你想在点击操作时处理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);

    }
});

【讨论】:

    猜你喜欢
    • 2018-07-13
    • 1970-01-01
    • 2015-07-24
    • 2016-10-11
    • 1970-01-01
    • 2016-03-18
    • 2015-02-17
    • 1970-01-01
    相关资源
    最近更新 更多