Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从微调器侦听器访问变量?_Java_Android - Fatal编程技术网

Java 如何从微调器侦听器访问变量?

Java 如何从微调器侦听器访问变量?,java,android,Java,Android,我有以下代码,在其中我想访问按钮侦听器上的“selectedTeam” //Adding setOnItemSelectedListener method on spinner. sTeams.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(Adapte

我有以下代码,在其中我想访问按钮侦听器上的“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();
                // 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