Возврат переменной в публичной пустоте - PullRequest
1 голос
/ 21 апреля 2010

Я не знаком с программированием приложений для Android, однако столкнулся с проблемой: я не могу найти способ создания глобальных переменных - в отличие от других кодировок, таких как 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' и отображает его в тосте. Затем я хочу, чтобы он возвращал значение для строковой переменной 'songtoplay' - или нашел способ сделать его глобальным или пригодным для использования в другом Public Void (который будет кнопкой, загружающей песню для воспроизведения)

Пожалуйста, помогите мне,

Большое спасибо.

Джеймс

Ответы [ 3 ]

4 голосов
/ 21 апреля 2010

Используйте переменную экземпляра:

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 статические переменные являются эквивалентом глобальных переменных, и их лучше всего избегать , как и всех глобальных переменных.

0 голосов
/ 21 апреля 2010

Я бы просто попросил мой класс реализовать интерфейс 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);
    }
}
0 голосов
/ 21 апреля 2010

Не забывайте и о доступе к пакетам. Лучше, чем статические переменные для вашего случая. В конце концов, то, что на самом деле означает «static» в контексте Java, немного отличается от того, что в C: это означает, что «в этом классе есть только один экземпляр этой вещи». Это может или не может быть то, что вы действительно хотите.

На самом деле, вполне возможно, что вы захотите объявить одну и ту же переменную как статическую (так, чтобы на самом деле был только один), так и доступ к пакету (чтобы любой другой класс в том же пакете мог видеть это).

Но остерегайтесь глобальных: существует ПРИЧИНА хороших практик разработки программного обеспечения, таких как ООП / ООД, в наши дни так сильно недовольных глобальными. Они в порядке для небольших программ, иногда именно то, что вы хотите, но даже там они могут превратиться в ловушку. Вот почему вместо действительно глобальных переменных люди используют либо доступ к пакету, либо открытые переменные, встроенные в / член общедоступного класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...