Android Java: Using setOnClickListener in for loop
android, final, for-loop, java
Solution
Declare a new variable `j` and modify your code as:
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);
}
}
});
Try this. This will work.
Problem
I'm in the early stages of android development and I had a problem with a `for` loop. Here is my code: ``` 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); } } }); } ``` I have `TableRows` and two `textViews` in each `TableRows`. When I click the first `textView1[i]`, the second one, `textView2[i]` will be invisible or visible. But in `setOnClickListener` code block I had "variable 'i' is accessed from within inner class needs to be declared final" error code. I have declared `i` as `final`, like `for(final int i=0; i<=30; i++)`. Then I had a different error. "Variable 'i' Can not be declared final"