Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 24 апр 2017, 03:42

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 101 ]  На страницу 1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Урок 56. Spinner – выпадающий список
СообщениеДобавлено: 13 фев 2012, 04:00 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1323
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
В этом уроке:

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

Click here to read this article!

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Последний раз редактировалось damager82 23 июн 2016, 22:18, всего редактировалось 5 раз(а).

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 21 фев 2012, 23:55 

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 22 фев 2012, 02:25 
Аватар пользователя

Зарегистрирован: 21 фев 2012, 20:11
Сообщений: 15
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
И не будет видеть. Если я правильно понял код, то определение переменной spinner происходит в процедуре onCreate. В этой процедуре эта переменная и остается.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 22 фев 2012, 10:50 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1323
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
SoLVeX прав. Вынесите объявление переменной spinner за пределы метода, в класс:
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. Spinner spinner;


А вместо
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. Spinner spinner = (Spinner) findViewById(R.id.Opora);


оставьте
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. spinner = (Spinner) findViewById(R.id.Opora);]

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 22 фев 2012, 14:14 

Зарегистрирован: 15 фев 2012, 21:14
Сообщений: 18
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
damager82, большое спасибо =)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 26 фев 2012, 18:04 

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 27 фев 2012, 11:29 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1323
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
badlog писал(а):
Здравствуйте! У меня такой вопрос: как создать несколько выпадающих списков spinner, при чем так, чтобы их состав зависел друг от друга?
Например: Первый список определяет состав двух последующих, второй список определяет состав третьего.


Если например spinner2 зависит от spinner1, то для spinner1 добавляете обработчик spinner1.setOnItemSelectedListener. А в нем прописываете создание/изменение и присвоение адаптера для spinner2.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 12 май 2012, 23:25 

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 май 2012, 18:37 
Аватар пользователя

Зарегистрирован: 17 фев 2012, 22:23
Сообщений: 1339
Откуда: Мордор
Благодарил (а): 16 раз.
Поблагодарили: 161 раз.
Для этого можно использовать функцию getStringArray класса Resources.

_________________
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 май 2012, 00:36 

Зарегистрирован: 12 май 2012, 23:05
Сообщений: 7
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Спасибо.
Не могу разобраться с использованием ресурсов - пытаюсь подключать различные импорты, пользуясь догадками, но даже в ресурсках (Resourses.getStringArray) этот метод не появляется в списке возможных.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 май 2012, 11:25 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1323
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
fend писал(а):
Не могу разобраться с использованием ресурсов


Пример кода использования массива в Spinner:

Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. spinner = (Spinner) findViewById(R.id.mySpinner);
  2.  
  3. ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
  4.                 R.array.my_data, android.R.layout.simple_spinner_item);
  5. adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  6. spinner.setAdapter(adapter);


Оно?

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 май 2012, 13:04 
Аватар пользователя

Зарегистрирован: 17 фев 2012, 22:23
Сообщений: 1339
Откуда: Мордор
Благодарил (а): 16 раз.
Поблагодарили: 161 раз.
damager82 писал(а):
Оно?
Это еще более элегантный способ, чем я предложил :)

PS: Но если посмотреть внутрь этого метода, увидим использование того же самого Resources:
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. public static ArrayAdapter<CharSequence> createFromResource(Context context,
  2.         int textArrayResId, int textViewResId) {
  3.     CharSequence[] strings = context.getResources().getTextArray(textArrayResId);
  4.     return new ArrayAdapter<CharSequence>(context, textViewResId, strings);
  5. }

_________________
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 03 июл 2012, 13:58 

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 03 июл 2012, 17:59 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1323
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
Похоже, что этого не избежать. Хотя бы один элемент в спиннер-е всегда должен быть выбран.
В качестве альтернативы можно использовать диалог со списком с одиночным выбором.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 03 июл 2012, 19:29 

Зарегистрирован: 03 июл 2012, 13:47
Сообщений: 11
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Спасибо, а то я всю голову сломал.
Т.е. получается если есть текстовое поле в которое можно просто написать или вставить значение из списка то нужно делать диалог со списком, "батоном" его открывать и закрывать при "селекте" списка, при этом вставляя значение в текстовое поле. Но возникает вопрос: у списка нет события "клик", а опять возникает событие setOnItemSelectedListener, соответственно до диалога? Хотя я совсем мало знаю.
А есть событие у диалога "закрытие"? Можно тогда при "селекте" закрывать диалог, а при "закрытии" диалога вставлять значение выбранного селекта?
Я понятно излагаю? Нужно почитать доки.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 04 июл 2012, 12:02 
Аватар пользователя

Зарегистрирован: 17 фев 2012, 22:23
Сообщений: 1339
Откуда: Мордор
Благодарил (а): 16 раз.
Поблагодарили: 161 раз.
Ullis писал(а):
... у списка нет события "клик" ...
Есть, он называется onItemClickListener.

_________________
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 04 июл 2012, 18:48 

Зарегистрирован: 03 июл 2012, 13:47
Сообщений: 11
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
KamiSempai писал(а):
Есть, он называется onItemClickListener.
Простите, но разве здесь не написано:
setOnItemClickListener(AdapterView.OnItemClickListener l)
A spinner does not support item click events.
Или я чего-то не понимаю.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 05 июл 2012, 14:25 
Аватар пользователя

Зарегистрирован: 17 фев 2012, 22:23
Сообщений: 1339
Откуда: Мордор
Благодарил (а): 16 раз.
Поблагодарили: 161 раз.
Ullis писал(а):
Или я чего-то не понимаю.
Все правильно. Это я ошибся. Глаза зацепились за слово "Список".

_________________
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 05 июл 2012, 15:08 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1323
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
Ullis писал(а):
А есть событие у диалога "закрытие"? Можно тогда при "селекте" закрывать диалог, а при "закрытии" диалога вставлять значение выбранного селекта?

По диалогам я проделал немалую работу. Все изложил в уроках 58-67 на http://startandroid.ru/. Там есть и пример списка с одиночным выбором.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 июл 2012, 13:57 

Зарегистрирован: 03 июл 2012, 13:47
Сообщений: 11
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Спасибо Вам большое, если использовать диалог, то думаю тогда нет смысла использовать Spinner, проще в нем сделать ListView.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 101 ]  На страницу 1, 2, 3, 4, 5, 6  След.

Часовой пояс: UTC + 4 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB