我正处于android开发的早期阶段,for循环出现了问题。
这是我的代码:
for (int i=0; i<=30; i++){
tableRows[i] = new TableRow(this);
tableRows[i].setId(i);
tableRows[i].setLayoutParams(tableRowParams);
tableRows[i].setBackgroundResource(R.drawable.bg);
textViews1[i] = new TextView(this);
textViews1[i].setText("Eng Kelime " + i);
textViews1[i].setTextSize(25);
textViews1[i].setTextColor(Color.WHITE);
textViews1[i].setId(i);
textViews1[i].setPadding(20, 30, 0, 0);
textViews1[i].setLayoutParams(Params2);
tableRows[i].addView(textViews1[i]);
textViews2[i] = new TextView(this);
textViews2[i].setText("Tr Kelime " + i);
textViews2[i].setTextSize(25);
textViews2[i].setTextColor(Color.WHITE);
textViews2[i].setId(i);
textViews2[i].setPadding(30,30,0,0);
textViews2[i].setLayoutParams(Params2);
tableRows[i].addView(textViews2[i]);
tableLayout.addView(tableRows[i]);
textViews1[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//These textViews[i] veriables need to be declared final.
//But I don't know how!..
if (textViews2[i].getVisibility() == View.VISIBLE) {
textViews2[i].setVisibility(View.INVISIBLE);
}else{
textViews2[i].setVisibility(View.VISIBLE);
}
}
});
}我有TableRows和两个textViews在每个TableRows中。当我单击第一个textView1[i],第二个,textView2[i]将是不可见的或可见的。
但是在setOnClickListener代码块中,我有“变量'i‘是从内部类中访问的,需要声明为最终”错误代码。
我宣布i为final,就像for(final int i=0; i<=30; i++)一样。然后我犯了一个不同的错误。“变量'i‘不能被宣布为最终变量”
发布于 2015-02-21 12:29:26
声明一个新变量j并将代码修改为:
final int j = i;
textViews1[j].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (textViews2[j].getVisibility() == View.VISIBLE) {
textViews2[j].setVisibility(View.INVISIBLE);
}else{
textViews2[j].setVisibility(View.VISIBLE);
}
}
});尝尝这个。这会管用的。
发布于 2015-02-21 12:28:31
为了从内部类访问局部变量,必须声明它为final,因此不能在外部更改它。您可以通过使用额外的虚拟变量来做到这一点:
final index = i; // here!
textViews1[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (textViews2[index].getVisibility() == View.VISIBLE) {
textViews2[index].setVisibility(View.INVISIBLE);
}else{
textViews2[index].setVisibility(View.VISIBLE);
}
}
});发布于 2015-02-21 12:29:54
试试这个:
final TextView txtToToggle = textViews2[i];
textViews1[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (txtToToggle.getVisibility() == View.VISIBLE) {
txtToToggle.setVisibility(View.INVISIBLE);
} else {
txtToToggle.setVisibility(View.VISIBLE);
}
}
});https://stackoverflow.com/questions/28645751
复制相似问题