【问题标题】:Variable is accessed from within inner class , needs to be declared final变量是从内部类中访问的,需要声明为final
【发布时间】:2015-07-24 18:25:31
【问题描述】:

我正在使用多个复选框,需要对选中的复选框执行不同的操作,即根据选中的复选框增加一些静态变量。

所以问题是我不能使变量 i 成为最终的(使用循环),否则它在内部类中是不可访问的。 有什么我可以解决的办法吗?

  for (int i = 1; i <= 99; i++)

    {
        int ids = Integer.parseInt("R.id.s" + i);

        seats[i] = (CheckBox) findViewById(ids);
        seats[i].setWidth(15);
        seats[i].setHeight(16);

        seats[i].setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(i<=33)
                    SelectSeat.ROYAL++;

                if(i<=77 && i>33)
                SelectSeat.PLAT++;

                else
                    SelectSeat.GOLD++;
            }
        });
    }

【问题讨论】:

    标签: android checkbox inner-classes final


    【解决方案1】:

    用以下代码替换您的代码:

    for (int i = 1; i <= 99; i++)
    
        {
            int ids = Integer.parseInt("R.id.s" + i);
    
            seats[i] = (CheckBox) findViewById(ids);
            seats[i].setWidth(15);
            seats[i].setHeight(16);
    
            final int finalI = i;
            seats[i].setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if(finalI <=33)
                        SelectSeat.ROYAL++;
    
                    if(finalI <=77 && finalI >33)
                        SelectSeat.PLAT++;
    
                    else
                        SelectSeat.GOLD++;
                }
            });
        }
    

    这应该可以解决您的问题。

    我在这里所做的是将您的 i 复制到每个循环中的最终 int finalI 中,并在内部类中使用 finalI 而不是 i

    【讨论】:

    • 快速简单的修复,谢谢 (y)
    猜你喜欢
    • 2019-09-22
    • 2018-07-13
    • 1970-01-01
    • 2015-02-17
    • 2016-10-11
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    相关资源
    最近更新 更多