gpt4 book ai didi

android - 无法访问内部类 : Android Studio 中的变量

转载 作者:行者123 更新时间:2023-11-30 05:10:55 25 4
gpt4 key购买 nike

我项目的目标是分配代表选中空数组的复选框的数字。

int [] mChecked = new int []{};

我尝试创建一个循环,其中的复选框编号被单击并将 mCheked 数组分配给新值,该数字对应于复选框编号,当我尝试它时无法访问内部类中的变量。在 android studio 中,您必须创建新变量 final int FinalI = i; 来跟踪代码,但如果它是 final,则您无法重新分配该值。

这是出错的部分代码。

 for(int i=0 ; i < arrayCheck.length ; i++)
{

arrayCheck[i].setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

mChecked[i] = i+1;

}
});
}

特别是这条线

mChecked[i] = i+1;

image of error part

这是完整的代码

  package com.okssaami.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;

public class MainActivity extends AppCompatActivity {

CheckBox G1, G2, G3, G4, G5, G6, G7, G8, G9, G10, G11, G12, G13, G14, G15,
G16, G17, G18, G19, G20, G21, G22, G23, G24, G25, G26, G27, G28, G29, G30,
G31, G32, G33, G34;
Button Submit;

int [] mChecked = new int []{};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

int [] ids = new int [] {
R.id.G1,
R.id.G2,
R.id.G3,
R.id.G4,
R.id.G5,
R.id.G6,
R.id.G7,
R.id.G8,
R.id.G9,
R.id.G10,
R.id.G11,
R.id.G12,
R.id.G13,
R.id.G14,
R.id.G15,
R.id.G16,
R.id.G17,
R.id.G18,
R.id.G19,
R.id.G20,
R.id.G21,
R.id.G22,
R.id.G23,
R.id.G24,
R.id.G25,
R.id.G26,
R.id.G27,
R.id.G28,
R.id.G29,
R.id.G30,
R.id.G31,
R.id.G32,
R.id.G33,
R.id.G34
};

final CheckBox [] arrayCheck = new CheckBox[ids.length];

for(int i=0 ; i < arrayCheck.length ; i++)
{
arrayCheck[i] = (CheckBox) findViewById(ids[i]);
}

for(int i=0 ; i < arrayCheck.length ; i++)
{

arrayCheck[i].setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

mChecked[i] = i+1;

}
});
}


}


}

最佳答案

这是你的变量 i 在堆栈上声明的结果,然后你尝试在堆栈消失后在内部类中使用它(编译器识别它并告诉你使用final 变量,以便它可以在内部类中使用它)。要准确了解您做错了什么,您可以看看这个 article .

试试这个:

for(int i=0 ; i < arrayCheck.length ; i++)
{
final int value = i;
arrayCheck[i].setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

mChecked[value] = value+1;

}
});
}

关于android - 无法访问内部类 : Android Studio 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53766072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com