我很喜欢Android App的编程,但是我遇到了一个问题,我找不到一种方法来制作全局变量 - 像php或VB.NET这样的其他编码,全局变量是否可能?如果没有,有人可以找到一种方法(如果可能的话,实现我将在下面提供的代码的方式)从变量'songtoplay'中获取一个值,这样我就可以在另一个Public Void中使用...
以下是代码:
final Spinner hubSpinner = (Spinner) findViewById(R.id.myspinner);
ArrayAdapter adapter = ArrayAdapter.createFromResource( this, R.array.colours, android.R.layout.simple_spinner_item); adapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
hubSpinner.setAdapter(adapter);
//
hubSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
//code
Object ttestt = hubSpinner.getSelectedItem();
final String test2 = ttestt.toString();
Toast message1 = Toast.makeText(Textbox.this, test2, Toast.LENGTH_LONG);
message1.show();
String songtoplay = test2;
// Need songtoplay to be available in another 'Public Void'
}
public void onNothingSelected(AdapterView<?> parentView) {
//Code
}
});
基本上,它从Spinner的“hubSpinner”中获取值并将其显示在Toast中。然后我希望它返回一个字符串变量'songtoplay'的值 - 或者找到一种方法使它在另一个公共虚空中全局或可用,(这将是一个按钮,正在加载要播放的歌曲)
请帮助我,
非常感谢。
詹姆斯
答案 0 :(得分:4)
使用实例变量:
hubSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
private String songtoplay;
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
// ...
songtoplay = test2;
}
public void onNothingSelected(AdapterView<?> parentView) {
// ...
doSomethingWith(songtoplay);
}
});
在Java中,静态变量等同于全局变量,它们与所有全局变量一样best avoided。
答案 1 :(得分:0)
也不要忘记包访问。比你的情况更好的静态变量。毕竟,'静态'在Java上下文中的实际意义与C中的有点不同:它意味着“这个类中只有一个这样的实例”。这可能是也可能不是你真正想要的。
实际上,您很可能希望将同一个变量声明为静态(因此实际上只有一个)和包访问(以便同一个包中的任何其他类都可以看到它)。
但要注意全局:有一个很好的软件工程实践,比如OOP / OOD,这些天对全局变量非常不满意。它们适用于小型程序,有时候正是你想要的,但即使在那里,它们也可以变成诱杀陷阱。这就是为什么而不是真正的全局变量,人们使用包访问或嵌入在公共可访问类的成员中的公共变量。
答案 2 :(得分:0)
我只是让我的类实现OnItemSelectedListener接口。这样onItemSelected()方法就可以存储当前对象实例中的字符串。
一些真正的骨骼代码:
class MyClass extends Activity implements OnItemSelectedListener {
private String songtoplay;
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
// ...
this.songtoplay = test2;
}
public void needsSongtoplay(...) {
doSomething(this.songtoplay);
}
}