Java 如何从微调器侦听器访问变量?
我有以下代码,在其中我想访问按钮侦听器上的“selectedTeam”Java 如何从微调器侦听器访问变量?,java,android,Java,Android,我有以下代码,在其中我想访问按钮侦听器上的“selectedTeam” //Adding setOnItemSelectedListener method on spinner. sTeams.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(Adapte
//Adding setOnItemSelectedListener method on spinner.
sTeams.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
selectedTeam = parent.getItemAtPosition(position).toString();
editText.setText(selectedTeam, TextView.BufferType.EDITABLE);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
buttonApply.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
String editedName = editText.getText().toString();
// Here I want to access selectedTeam
}
});
//在微调器上添加setOnItemSelectedListener方法。
streams.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图、,
内部位置,长id){
selectedTeam=parent.getItemAtPosition(position.toString();
editText.setText(selectedTeam,TextView.BufferType.EDITABLE);
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
setOnClickListener(新建Button.OnClickListener(){
公共void onClick(视图v){
String editedName=editText.getText().toString();
//我想在这里访问selectedTeam
}
});
我试图在方法外部声明变量,但这会导致错误“variable'selectedTeam'是从内部类访问的,需要声明为final”。我试过了,但这不起作用,因为最后的字符串无法更改。请改用class member
在:
当一个内部类(其声明不出现在静态
上下文)引用的实例变量是
词法封闭类,对应词法封闭类的变量
使用封闭实例
使用的任何局部变量、形式参数或异常参数
内部类中未声明的必须声明为final
这意味着您只能在匿名内部类中使用外部final
变量或封闭类成员
[...]
private String selectedTeam;
[...]
//Adding setOnItemSelectedListener method on spinner.
sTeams.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
selectedTeam = parent.getItemAtPosition(position).toString();
editText.setText(selectedTeam, TextView.BufferType.EDITABLE);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
buttonApply.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
String editedName = editText.getText().toString();
if (selectedTeam != null && !"".equals(selectedTeam)) {
// Do something
}
}
});
[…]
私有字符串selectedTeam;
[...]
//正在微调器上添加setOnItemSelectedListener方法。
streams.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图、,
内部位置,长id){
selectedTeam=parent.getItemAtPosition(position.toString();
editText.setText(selectedTeam,TextView.BufferType.EDITABLE);
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
setOnClickListener(新建Button.OnClickListener(){
公共void onClick(视图v){
String editedName=editText.getText().toString();
如果(selectedTeam!=null&!“.equals(selectedTeam)){
//做点什么
}
}
});
您需要将变量声明为全局变量
public class MainActivity extends AppCompatActivity {
String selectedteam;
...
buttonApply.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
String editedName = editText.getText().toString();
selectedteam = editedName; // or whatever you want
}
});
在我的例子中,我使用共享首选项来存储值,并在我想要使用的地方获取该值
SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
editor.putString("name", "selectedTeam");
editor.apply();
如何获取价值:
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
String restoredText = prefs.getString("name", null);
希望对您有所帮助谢谢您的解释。我现在明白了,尽管我还不知道如何解决我的问题。如何从方法外部访问“selectedTeam”?对不起,我的问题。我编辑到
selectedTeam
selectedTeam
现在是封闭类成员,因此您可以在匿名类内外访问它。@没有名字请注意不要在外部声明selectedTeam
以防止阴影问题,或者您只需使用ClassName。这是。selectedTeam
而不是内部类中的selectedTeam
。