如何访问内部类Android中的变量



我已经通过编程创建了4个无线电组。当我试图通过内部类使用setOnClickListener时,问题来了,该类需要访问用于声明无线电组的循环的迭代变量(i)。我还尝试使用迭代器变量final,但没有成功。我需要设置所有4个无线电组clearCheck()。这是我的代码:

public class MainActivity extends AppCompatActivity {
    **RadioGroup[] radioGroup;**
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        radioGroup = new RadioGroup[4];
        for (int i = 0; i < 4; i++) {
            radioGroup[i] = new RadioGroup(this);
            finishButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    **radioGroup[i].clearCheck();**
                }
            });
            linearLayout.addView(radioGroup[i]);
        }
    }
}

错误为:local variable i is accessed from within inner class; needs to be declared final
谢谢

对于第一个问题:local variable i is accessed from within inner class; needs to be declared final(或如何访问标题中内部类中的变量),只需将i的值复制到另一个最终有效值(例如j)即可解决此问题。然后在内部类中使用复制的。

final int j = i;
finishButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        radioGroup[j].clearCheck();
    }
});

这种技术经常使用。


对于下一个问题:clearCheck()仅应用于第4个无线电组。这是因为您可以一次将单个OnClickListener设置为finishButton。这是第四组的最后一盘比赛。

因此,您应该只设置一个OnClickListener,并且在侦听器中,您可以为所有RadioGroup调用clearCheck。然后下面将解决您的问题。

radioGroup = new RadioGroup[4];
for (int i = 0; i < 4; i++) {
    radioGroup[i] = new RadioGroup(this);
    linearLayout.addView(radioGroup[i]);
}
finishButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        for (int i = 0; i < 4; i++) {
            radioGroup[i].clearCheck();
        }
    }
});

请注意,这个解决方案比清除local variable i is accessed from within inner class; needs to be declared final错误更基本地清除了您的问题,因此不再需要我上面建议的第一个解决方案。您不再需要访问标题中内部类中的变量。

相关内容

  • 没有找到相关文章

最新更新