首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问内部类Android中的变量

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

Stack Overflow用户
提问于 2015-10-30 11:50:12
回答 1查看 1.6K关注 0票数 2

我以编程的方式创建了4个无线电组。当我试图通过内部类使用setOnClickListener时,问题就出现了,它需要访问用于声明无线电组的循环的迭代变量(i)。我还试图让迭代器变量最终完成,但它没有工作。我需要设置所有4个无线电组clearCheck()。这是我的代码:

代码语言:javascript
复制
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

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-30 11:56:46

对于第一个问题:local variable i is accessed from within inner class; needs to be declared final (或如何访问标题中的内部类中的变量),只需将i的值复制到另一个可验证的(例如),就可以清除这个问题。j)。然后在内部类中使用复制的一个。

代码语言:javascript
复制
final int j = i;
finishButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        radioGroup[j].clearCheck();
    }
});

这种技术经常被使用。

对于下一个问题:clearCheck() 只应用于第4无线电组。这是因为您可以同时将单个OnClickListener设置为finishButton。这是第四组最后一组只有效的一组。

因此,您应该只设置一个OnClickListener,并且在侦听器中可以为所有RadioGroups调用clearCheck。那么下面就可以解决你的问题了。

代码语言:javascript
复制
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错误,因此我前面提出的第一个解决方案将不再需要。您不再需要访问标题中的内部类中的变量。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33435324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档