Страница 1 из 6

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

Добавлено: 13 фев 2012, 03:00
damager82
В этом уроке:

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

[url=http://www.startandroid.ru/ru/uroki/vse ... l:8g1ozf7p]Click here to read this article![/url:8g1ozf7p]

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

Добавлено: 21 фев 2012, 22:55
OctahedroN
Здравствуйте, у меня к вам назрел ещё один вопрос. Попытался добавить данные из 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 всегда равна первому значению, если менять то ничего не происходит. Возможно мне где-то что-то нужно дописать, только я не знаю что =(

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

Добавлено: 22 фев 2012, 01:25
SoLVeX
И не будет видеть. Если я правильно понял код, то определение переменной spinner происходит в процедуре onCreate. В этой процедуре эта переменная и остается.

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

Добавлено: 22 фев 2012, 09:50
damager82
SoLVeX прав. Вынесите объявление переменной spinner за пределы метода, в класс:

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

Spinner spinner;
А вместо

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

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

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

spinner = (Spinner) findViewById(R.id.Opora);]

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

Добавлено: 22 фев 2012, 13:14
OctahedroN
damager82, большое спасибо =)

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

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

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

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

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

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

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

Добавлено: 13 май 2012, 17:37
KamiSempai
Для этого можно использовать функцию getStringArray класса Resources.

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

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

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

Добавлено: 15 май 2012, 10:25
damager82
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);
Оно?

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

Добавлено: 15 май 2012, 12:04
KamiSempai
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);
}

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

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

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

Добавлено: 03 июл 2012, 16:59
damager82
Похоже, что этого не избежать. Хотя бы один элемент в спиннер-е всегда должен быть выбран.
В качестве альтернативы можно использовать диалог со списком с одиночным выбором.

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

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

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

Добавлено: 04 июл 2012, 11:02
KamiSempai
Ullis писал(а):... у списка нет события "клик" ...
Есть, он называется onItemClickListener.

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

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

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

Добавлено: 05 июл 2012, 13:25
KamiSempai
Ullis писал(а):Или я чего-то не понимаю.
Все правильно. Это я ошибся. Глаза зацепились за слово "Список".

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

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

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

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