Reputation: 38
I can't figure out how to fix this problem in my code: I am making a small app which randomly asks you for 20 words from Dutch (nederlands) to English (engels). I have saved the words in arrays and the words are randomly picked now. There are 2 buttons: One for picking a random word and one for checking if the answer is correct. The variable iwoord is given a random value when pressing button Newword and i want the same value to be used in the next OnClickListener, so I can compare the arrays and see if the answer is correct. But the variable cannot be resolved in the second OnClickListener. Can anybody help me solving my problem?
public class MainActivity extends Activity {
EditText NederlandsEdit;
EditText EngelsEdit;
Button ControleerButton;
Button NieuwwoordButton;
Random woord = new Random();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final String[] nederlands = new String[20];
nederlands[0] = "bij";
nederlands[1] = "paraplu";
nederlands[2] = "hond";
nederlands[3] = "kaas";
nederlands[4] = "eekhoorn";
nederlands[5] = "fiets";
nederlands[6] = "auto";
nederlands[7] = "vis";
nederlands[8] = "maan";
nederlands[9] = "aarde";
nederlands[10] = "vuur";
nederlands[11] = "boom";
nederlands[12] = "blaadje";
nederlands[13] = "soep";
nederlands[14] = "sok";
nederlands[15] = "potlood";
nederlands[16] = "kat";
nederlands[17] = "muis";
nederlands[18] = "zeep";
nederlands[19] = "ring";
final String[] engels = new String[20];
engels[0] = "bee";
engels[1] = "umbrella";
engels[2] = "dog";
engels[3] = "cheese";
engels[4] = "squirrel";
engels[5] = "bicycle";
engels[6] = "car";
engels[7] = "fish";
engels[8] = "moon";
engels[9] = "earth";
engels[10] = "fire";
engels[11] = "tree";
engels[12] = "leaf";
engels[13] = "soup";
engels[14] = "sock";
engels[15] = "pencil";
engels[16] = "cat";
engels[17] = "mouse";
engels[18] = "soap";
engels[19] = "ring";
NederlandsEdit = (EditText) findViewById(R.id.editnederlands);
EngelsEdit = (EditText) findViewById(R.id.editengels);
ControleerButton = (Button) findViewById(R.id.butcontroleer);
NieuwwoordButton = (Button) findViewById(R.id.butnieuwwoord);
NieuwwoordButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NieuwwoordButton.setEnabled(false);
ControleerButton.setEnabled(true);
int iwoord = woord.nextInt(20 - 0) + 0;
NederlandsEdit.setText(nederlands[iwoord]);
}
});
ControleerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(EngelsEdit.getText().toString().equals(engels[iwoord])){
Toast.makeText(getBaseContext(), "correct!", Toast.LENGTH_SHORT).show();
}
else
{
i = i + 1;
}
}
});
}
Upvotes: 0
Views: 67
Reputation: 6620
In case you are facing problems that listeners ask you to make your variable final, use a setter and a getter method for your variable. You cant change the value of an integer variable once you have initialized it for the first time. Don't use it directly in the Listener code, and you wont have to make it final.
Read this article if you need to be familiar with getters and setters.
Upvotes: 0
Reputation: 168
The int "iwoord" should be declared globally just like the edittexts. I have posted the code just in case.
package com.example.stack_test;
import java.util.Random;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
EditText NederlandsEdit;
EditText EngelsEdit;
Button ControleerButton;
Button NieuwwoordButton;
Random woord = new Random();
int i,iwoord;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final String[] nederlands = new String[20];
nederlands[0] = "bij";
nederlands[1] = "paraplu";
nederlands[2] = "hond";
nederlands[3] = "kaas";
nederlands[4] = "eekhoorn";
nederlands[5] = "fiets";
nederlands[6] = "auto";
nederlands[7] = "vis";
nederlands[8] = "maan";
nederlands[9] = "aarde";
nederlands[10] = "vuur";
nederlands[11] = "boom";
nederlands[12] = "blaadje";
nederlands[13] = "soep";
nederlands[14] = "sok";
nederlands[15] = "potlood";
nederlands[16] = "kat";
nederlands[17] = "muis";
nederlands[18] = "zeep";
nederlands[19] = "ring";
final String[] engels = new String[20];
engels[0] = "bee";
engels[1] = "umbrella";
engels[2] = "dog";
engels[3] = "cheese";
engels[4] = "squirrel";
engels[5] = "bicycle";
engels[6] = "car";
engels[7] = "fish";
engels[8] = "moon";
engels[9] = "earth";
engels[10] = "fire";
engels[11] = "tree";
engels[12] = "leaf";
engels[13] = "soup";
engels[14] = "sock";
engels[15] = "pencil";
engels[16] = "cat";
engels[17] = "mouse";
engels[18] = "soap";
engels[19] = "ring";
NederlandsEdit = (EditText) findViewById(R.id.editnederlands);
EngelsEdit = (EditText) findViewById(R.id.editengels);
ControleerButton = (Button) findViewById(R.id.butcontroleer);
NieuwwoordButton = (Button) findViewById(R.id.butnieuwwoord);
NieuwwoordButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NieuwwoordButton.setEnabled(false);
ControleerButton.setEnabled(true);
iwoord = woord.nextInt(20 - 0) + 0;
NederlandsEdit.setText(nederlands[iwoord]);
}
});
ControleerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(EngelsEdit.getText().toString().equals(engels[iwoord])){
Toast.makeText(getBaseContext(), "correct!", Toast.LENGTH_SHORT).show();
}
else
{
i = i + 1;
}
}
});
}
}
Upvotes: 2
Reputation: 2340
Declare your variable globally and you can able assign value from first onclicklistener
and use it frm the second onclicklistener
Upvotes: 1