Reputation: 133
Please, help me. I am trying to build a simple application in which you select a hobby from a spinner you click in the button "aceptar" and its return the string from that spinner to the main activity. I am getting the error "cannot refer to a non-final variable inside an inner class defined in a different method" in the variable "myspinner".
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
public class ActivitySaludo extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_saludo);
String myspinner;
Intent intent = getIntent();
String saludo = intent.getStringExtra(MainActivity.EXTRA_SALUDO);
TextView txtCambiado = (TextView) findViewById(R.id.TxtSaludo);
txtCambiado.setText(getString(R.string.hola_saludo) + " " + saludo);
final Spinner spinner = (Spinner)findViewById(R.id.SpinnerSaludo);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.hobby, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener () {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
parent.getItemAtPosition(pos);
myspinner = spinner.getItemAtPosition(pos).toString();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
//another call
}
});
final Button BtnAceptar=(Button) findViewById(R.id.buttonAceptar);
BtnAceptar.setOnClickListener(new OnClickListener (){
@Override
public void onClick(View v) {
Intent iboton = new Intent();
}
});
}
}
Upvotes: 1
Views: 2646
Reputation: 887
That's because the spinner is declared outside the listener. You can either declare the spinner as final or declare it inside the listener.
Upvotes: 1
Reputation: 74066
String myspinner
needs to be final, you cannot access a non final local variable inside an interface
so all you need to do is move String myspinner
out of onCreate
and make it a class wide variable. then you dont need it to be final
Upvotes: 3