在公共空白中返回变量

时间:2010-04-20 22:01:50

标签: java android eclipse variables global-variables

我很喜欢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'的值 - 或者找到一种方法使它在另一个公共虚空中全局或可用,(这将是一个按钮,正在加载要播放的歌曲)

请帮助我,

非常感谢。

詹姆斯

3 个答案:

答案 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);
    }
}