Урок 56. Spinner – выпадающий список

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 56. Spinner – выпадающий список

Сообщение damager82 » 13 фев 2012, 03:00

В этом уроке:

- используем Spinner

[url=http://www.startandroid.ru/ru/uroki/vse ... l:8g1ozf7p]Click here to read this article![/url:8g1ozf7p]
Последний раз редактировалось damager82 08 май 2017, 16:02, всего редактировалось 6 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

OctahedroN
Сообщения: 18
Зарегистрирован: 15 фев 2012, 20:14

Re: Урок 56. Spinner – выпадающий список

Сообщение OctahedroN » 21 фев 2012, 22:55

Здравствуйте, у меня к вам назрел ещё один вопрос. Попытался добавить данные из Spinner в базу данных, но программа ругается на то что не видит spinner в методе onclick. Вот кусок кода, если можете, подскажите пожалуйста

String[] opora = {"1", "2", "3", "4"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, opora);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

Spinner spinner = (Spinner) findViewById(R.id.Opora);
spinner.setAdapter(adapter);
spinner.setPrompt("Выберите опору");


spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(getBaseContext(), "Position = " + position, 1000).show();
}
public void onNothingSelected(AdapterView<?> arg0) {
}
});

}

public void onClick(View v) {


ContentValues cv = new ContentValues();


int N = Integer.parseInt(ND.getText().toString());
int X = Integer.parseInt(XD.getText().toString());
int Y = Integer.parseInt(YD.getText().toString());
int Op = Integer.parseInt(spinner.getSelectedItem().toString()); <---- здесь пишет что spinner не сущ.
Log.d(LOG_TAG, "Op = " + Op);

Если я создаю адаптер в методе OnClick то у меня Op всегда равна первому значению, если менять то ничего не происходит. Возможно мне где-то что-то нужно дописать, только я не знаю что =(

SoLVeX
Сообщения: 15
Зарегистрирован: 21 фев 2012, 19:11
Контактная информация:

Re: Урок 56. Spinner – выпадающий список

Сообщение SoLVeX » 22 фев 2012, 01:25

И не будет видеть. Если я правильно понял код, то определение переменной spinner происходит в процедуре onCreate. В этой процедуре эта переменная и остается.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 56. Spinner – выпадающий список

Сообщение damager82 » 22 фев 2012, 09:50

SoLVeX прав. Вынесите объявление переменной spinner за пределы метода, в класс:

Код: Выделить всё

Spinner spinner;
А вместо

Код: Выделить всё

Spinner spinner = (Spinner) findViewById(R.id.Opora);
оставьте

Код: Выделить всё

spinner = (Spinner) findViewById(R.id.Opora);]
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

OctahedroN
Сообщения: 18
Зарегистрирован: 15 фев 2012, 20:14

Re: Урок 56. Spinner – выпадающий список

Сообщение OctahedroN » 22 фев 2012, 13:14

damager82, большое спасибо =)

badlog
Сообщения: 2
Зарегистрирован: 26 фев 2012, 16:43

Re: Урок 56. Spinner – выпадающий список

Сообщение badlog » 26 фев 2012, 17:04

Здравствуйте! У меня такой вопрос: как создать несколько выпадающих списков spinner, при чем так, чтобы их состав зависел друг от друга?
Например: Первый список определяет состав двух последующих, второй список определяет состав третьего.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 56. Spinner – выпадающий список

Сообщение damager82 » 27 фев 2012, 10:29

badlog писал(а):Здравствуйте! У меня такой вопрос: как создать несколько выпадающих списков spinner, при чем так, чтобы их состав зависел друг от друга?
Например: Первый список определяет состав двух последующих, второй список определяет состав третьего.
Если например spinner2 зависит от spinner1, то для spinner1 добавляете обработчик spinner1.setOnItemSelectedListener. А в нем прописываете создание/изменение и присвоение адаптера для spinner2.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

fend
Сообщения: 7
Зарегистрирован: 12 май 2012, 22:05

Re: Урок 56. Spinner – выпадающий список

Сообщение fend » 12 май 2012, 22:25

Здравствуйте!
Такой вопрос: а как создать spinner не на основе статического массива в java-файле, а при помощи <string-array ... ></string-array> в ресурсах (например, string.xml)?

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 56. Spinner – выпадающий список

Сообщение KamiSempai » 13 май 2012, 17:37

Для этого можно использовать функцию getStringArray класса Resources.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

fend
Сообщения: 7
Зарегистрирован: 12 май 2012, 22:05

Re: Урок 56. Spinner – выпадающий список

Сообщение fend » 14 май 2012, 23:36

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

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 56. Spinner – выпадающий список

Сообщение damager82 » 15 май 2012, 10:25

fend писал(а):Не могу разобраться с использованием ресурсов
Пример кода использования массива в Spinner:

Код: Выделить всё

spinner = (Spinner) findViewById(R.id.mySpinner);

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
		R.array.my_data, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
Оно?
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 56. Spinner – выпадающий список

Сообщение KamiSempai » 15 май 2012, 12:04

damager82 писал(а):Оно?
Это еще более элегантный способ, чем я предложил :)

PS: Но если посмотреть внутрь этого метода, увидим использование того же самого Resources:

Код: Выделить всё

public static ArrayAdapter<CharSequence> createFromResource(Context context,
        int textArrayResId, int textViewResId) {
    CharSequence[] strings = context.getResources().getTextArray(textArrayResId);
    return new ArrayAdapter<CharSequence>(context, textViewResId, strings);
}
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Ullis
Сообщения: 11
Зарегистрирован: 03 июл 2012, 12:47

Re: Урок 56. Spinner – выпадающий список

Сообщение Ullis » 03 июл 2012, 12:58

Здравствуйте.
Я только не давно начал разбираться с андроидом, поэтому не все понятно пока.
Вопрос: почему событие setOnItemSelectedListener возникает сразу после инициализации приложения, а не непосредственно при "селекте" списка.
Т.е. я хочу, что бы в необходимое текстовое поле попадало значение выбранного мною элемента списка, а оно попадает сразу "item=0" после загрузки приложения.
Спасибо.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 56. Spinner – выпадающий список

Сообщение damager82 » 03 июл 2012, 16:59

Похоже, что этого не избежать. Хотя бы один элемент в спиннер-е всегда должен быть выбран.
В качестве альтернативы можно использовать диалог со списком с одиночным выбором.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Ullis
Сообщения: 11
Зарегистрирован: 03 июл 2012, 12:47

Re: Урок 56. Spinner – выпадающий список

Сообщение Ullis » 03 июл 2012, 18:29

Спасибо, а то я всю голову сломал.
Т.е. получается если есть текстовое поле в которое можно просто написать или вставить значение из списка то нужно делать диалог со списком, "батоном" его открывать и закрывать при "селекте" списка, при этом вставляя значение в текстовое поле. Но возникает вопрос: у списка нет события "клик", а опять возникает событие setOnItemSelectedListener, соответственно до диалога? Хотя я совсем мало знаю.
А есть событие у диалога "закрытие"? Можно тогда при "селекте" закрывать диалог, а при "закрытии" диалога вставлять значение выбранного селекта?
Я понятно излагаю? Нужно почитать доки.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 56. Spinner – выпадающий список

Сообщение KamiSempai » 04 июл 2012, 11:02

Ullis писал(а):... у списка нет события "клик" ...
Есть, он называется onItemClickListener.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Ullis
Сообщения: 11
Зарегистрирован: 03 июл 2012, 12:47

Re: Урок 56. Spinner – выпадающий список

Сообщение Ullis » 04 июл 2012, 17:48

KamiSempai писал(а):Есть, он называется onItemClickListener.
Простите, но разве здесь не написано:
setOnItemClickListener(AdapterView.OnItemClickListener l)
A spinner does not support item click events.
Или я чего-то не понимаю.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 56. Spinner – выпадающий список

Сообщение KamiSempai » 05 июл 2012, 13:25

Ullis писал(а):Или я чего-то не понимаю.
Все правильно. Это я ошибся. Глаза зацепились за слово "Список".
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 56. Spinner – выпадающий список

Сообщение damager82 » 05 июл 2012, 14:08

Ullis писал(а):А есть событие у диалога "закрытие"? Можно тогда при "селекте" закрывать диалог, а при "закрытии" диалога вставлять значение выбранного селекта?
По диалогам я проделал немалую работу. Все изложил в уроках 58-67 на http://startandroid.ru/. Там есть и пример списка с одиночным выбором.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Ullis
Сообщения: 11
Зарегистрирован: 03 июл 2012, 12:47

Re: Урок 56. Spinner – выпадающий список

Сообщение Ullis » 06 июл 2012, 12:57

Спасибо Вам большое, если использовать диалог, то думаю тогда нет смысла использовать Spinner, проще в нем сделать ListView.

Ответить