Обмін даними між екранами app inventor, я дилетант

Обмін даними між екранами app inventor, я дилетант
Дуже часто виникає необхідність в передачі даних від одного екрана Android до іншого. І, наприклад, у мене, спочатку, це завдання викликала труднощі. Як завжди, проблема була в тому, що було незрозуміло куди лізти за відповіддю. Довго копирсався на гугловських форумі з App Inventor. Хоча, як виявилося потім, це простіше простого. Та й в інструкціях по App Inventor все необхідне є. Хочу в цій статті спростити для вас цей шлях.


Для вирішення цього завдання є кілька способів:
1. Використовуємо стандартний інструмент для передачі даних з одного екрана на інший, а саме обробник "open another screen with start value", який можна знайти в блоці "Control"

Обмін даними між екранами app inventor, я дилетант

Тут, до "screenName" приєднуємо назву екрана, який треба відкрити, наприклад:

Цю «пазліну» можна дістати з блоку "Text" і вписати назву необхідного екрану.
У гніздо нижче вставляємо ті дані, які нам необхідно передати. Наприклад, вміст одного з компонентів "Label".
Далі пристроюємо цю конструкцію в обробник того компонента, який нам потрібен, наприклад, кнопки і отримуємо:

Тобто, з першого екрану на другий має передатися значення з "Label1".
Тепер нам необхідно отримати це значення на другому екрані. Припустимо, що одержувачем даних на другому екрані буде теж текстове поле, яке назвемо "Label2". Для це будуємо на другому екрані наступну конструкцію:

З картинки, напевно, вже зрозуміло, що при кліці по кнопці поле "Label2" має бути чимось заповнено. Чим? А ось як раз даними, переданими з першого екрану.
Але розібраний варіант підходить для передачі одного значення. Набагато частіше їх треба передати кілька.
Отже, припускаємо, що нам треба передати дані з двох полів для введення тексту "TextBox" в текстові поля "Label" з номерами 1 і 2, відповідно.
Для вирішення цього завдання нам потрібно буде залізти в блоки "Lists" та "Math" - «Списки» і «Математика». Використовуючи необхідні блоки, будуємо тепер ось таку собі конструкцію:

Тут все майже так само як і в попередньому варіанті, але ми викликаємо блок створення списку "make a list" (створити список) і запихати в цей список потрібні значення.
Для отримання даних на другому екрані, як і раніше, робимо майже те ж, що і в першому варіанті, з невеликими змінами:

Для вилучення даних викликаємо їх зі списку. Цифри - це номери значень в тому порядку, в якому вони вивантажувалися з першого екрану. Тобто, "TextBox1" потрапив в список першим, значить, під номером «1» його і витягаємо.
Як бачите, все просто.

2. Використовуємо TinyDB з однаковим ім'ям для різних екранів. Це, по-моєму, нештатний спосіб для App Inventor. Принаймні, мені не вдалося знайти його в туторіали. Він полягає в тому, що для кожного екрану використовується компонент TinyDB, причому обов'язково з однаковим ім'ям.
Отже, завдання, приблизно, та ж - передати значення з поля введення тексту на першому екрані в текстове поле на другому після натискання кнопки на другому екрані.
Розміщуємо на обох екранах по компоненту TinyDB. За замовчуванням назва однакове - "TinyDB1".
На першому екрані складаємо з «пазлів»:

Обмін даними між екранами app inventor, я дилетант

Блок "StoreValue", при натисканні кнопки, бере значення з поля "TextBox3" і під ім'ям «Значення» поміщає його в базу даних.
На другому екрані «малюємо»:

В результаті, відбувається наступне: блок "GetValue" витягує з БД «Значення» і воно присвоюється полю "Label3". Оскільки ім'я БД одне і те ж, то і «Значення» буде таким же. Нижній рядок блок задає те, що якщо «Значення» в БД відсутнє, то полю "Label3" буде присвоєно значення "Label3" (смисловий переклад. «Якщо значення відсутній»).
Цей метод подобається мені тим, що крім передачі даних він забезпечує приміщення цих даних в базу даних програми Android. Завдяки цьому дані зберігаються при виключенні додатки, та й самого пристрою.
Можливо, що в App Inventor є й інші способи передачі даних від одного екрана до іншого, але мені цілком вистачає цих.

Це вам може бути цікаво:

  • Компоненти App Inventor - Storage.
  • Перше додаток в App Inventor. Верстаємо дизайн.
  • Компоненти для користувача інтерфейсу App Inventor. Частина 1.