Евгений Колесников 4 лет назад
Родитель
Сommit
d6852a5a21
2 измененных файлов с 72 добавлено и 1 удалено
  1. 70 0
      articles/android_auth.md
  2. 2 1
      readme.md

+ 70 - 0
articles/android_auth.md

@@ -796,6 +796,76 @@ else
 
 
 Имеет смысл и таблицу связей сразу считать в класс приложения (глобальный), а при переходе в продукт составлять локальный список идентификаторов материалов и затем искать по таблице материалов те, которые входят в этот список (`<List>.contains`)
 Имеет смысл и таблицу связей сразу считать в класс приложения (глобальный), а при переходе в продукт составлять локальный список идентификаторов материалов и затем искать по таблице материалов те, которые входят в этот список (`<List>.contains`)
 
 
+## Spinner (выпадающий список)
+
+Для реализации выпадающего списка (например, отфильтруем продукцию по типу) нужно в разметку добавить элемент **Spinner**
+
+```xml
+<Spinner
+    android:id="@+id/productTypeSpinner"
+    ...
+```
+
+Создать класс **ProductType** (не **data**, а обычный) и переопределить в нём метод *toString*, чтобы в выпадающем списке показывало то что нам нужно
+
+```kt
+class ProductType (val id: Int, val title: String){
+    override fun toString(): String {
+        return title
+    }
+}
+```
+
+В классе основного окна (в том, где вы будете использовать выпадающий список) создайте список для хранения типов продукции, получите указатель на элемент и назначте ему адаптер:
+
+```kt
+val productTypeList = ArrayList<ProductType>()
+...
+productTypeSpinner.adapter = ArrayAdapter(
+    this, 
+    R.layout.producttype_spinner, 
+    productTypeList)
+```
+
+Вторым параметром передаётся **layout** файл, в котором должен быть элемент **TextView** с `id="@android:id/text1"`
+
+```xml
+<?xml version="1.0" encoding="utf-8"?>
+<TextView 
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@android:id/text1"
+    style="?android:attr/spinnerItemStyle"
+    android:layout_width="match_parent"
+    android:layout_height="80dp"
+    android:ellipsize="marquee"
+    android:gravity="center_vertical"
+    android:singleLine="false"
+    android:textSize="20dp" />
+```
+
+Затем получить список типов продукции (http-запрос) и заполнить ими массив (с этим вы уже должны справиться сами) не забыв уведомить адаптер, что данные изменились
+
+```kt
+(productTypeSpinner.adapter as ArrayAdapter<*>).notifyDataSetChanged()
+```
+
+И при выборе элемента списка сделать фильтрацию списка продукции (тоже сделайте сами)
+
+```kt
+productTypeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
+    override fun onItemSelected(
+        parent: AdapterView<*>?,
+        view: View?,
+        position: Int,
+        id: Long
+    ) {
+        // тут реализовать фильтрацию
+    }
+
+    override fun onNothingSelected(parent: AdapterView<*>?) {}
+}
+```
+
 # Задание
 # Задание
 
 
 * на первый экран добавить заставку (splash-screen) с таймером на пару секунд, только потом показывать диалог для ввода логина/пароля
 * на первый экран добавить заставку (splash-screen) с таймером на пару секунд, только потом показывать диалог для ввода логина/пароля

+ 2 - 1
readme.md

@@ -144,12 +144,13 @@ http://sergeyteplyakov.blogspot.com/2014/01/microsoft-fakes-state-verification.h
 
 
 <!-- 
 <!-- 
 кнопки с картинками (нижнее или боковое меню)(фрагменты)
 кнопки с картинками (нижнее или боковое меню)(фрагменты)
+поиск (фильтрация) - строка поиска и выпадающий список
 операции с датой
 операции с датой
 
 
 - сохранение данных при повороте (попов вт)
 - сохранение данных при повороте (попов вт)
 - локальное хранилище (малинин ср)
 - локальное хранилище (малинин ср)
 - чтение/запись файлов (галерея) (смирнов чт)
 - чтение/запись файлов (галерея) (смирнов чт)
-- swype вниз (обновление списка)
+- swype вниз (обновление списка) (бастраков)
 
 
 чат
 чат
 tablayout
 tablayout