JavaRush/Курсы/Курс "Программирование под Андроид"/Присваиваем значения View-элементам

Присваиваем значения View-элементам

Открыта

Подытожим, что нам известно.

Итак, мы ознакомились с несколькими примерами того, как использовать метод setText для изменения View-элемента. Вот пример, который мы только что рассмотрели:

TextView orderSummaryTextView = (TextView) findViewById(R.id.order_summary_text_view);
orderSummaryTextView.setText(message);

Это делается в два шага:

Шаг 1: Получение объекта View с помощью его идентификатора

В первой строке кода мы получаем TextView и сохраняем его в переменную под названием orderSummaryTextView (текстовое поле заказа). Чтоб получить View, мы используем метод findViewById (получить view по идентификатору), это метод из класса Activity. В него передаём один аргумент — идентификатор view, этот аргумент мы предоставляем в виде R.id.IDOFVIEW. В данном случае идентификатор View заданный в XML — order_summary_text_view. Не забывайте про приведение объектов, этим занимается (TextView). То есть возвращаемое значение метода findViewById должно быть типа TextView, а не просто View.

Шаг 2: Вызов метода на объекте View

Поскольку мы вызываем метод на объекте, нужно использовать вызов через точку. Строка orderSummaryTextView.setText(message) — всё равно что инструкция “возьми объект orderSummaryTextView, которому можно присваивать текст (как написано в документации), и присвой ему текст из строки, которую передали в метод (в данном случае передали переменную типа String под названием message).

Ваша очередь

Сейчас Вы отработаете следующие шаги: получение объекта, сохранение его в переменную и управление этим объектом.

Шаг 1: Создайте новый проект

Для начала создайте новый проект (используйте шаблон Empty Activity на версиях Андроид Студио начиная с 1.4). Назовите своё приложение Cookies. Этот проект создаётся также, как проекты BirthdayCard, Just Java (заказ кофе) и Court Counter.

Шаг 2: Скопируйте файлы

Скопируйте и вставьте код Java и XML в соответствующие файлы. Вот ссылка на код.

Потом скопируйте следующую строку в файл build.gradle:

compile 'com.android.support:appcompat-v7:22.1.0'

Если Андроид Студио предложит Вам более новую версию библиотеки совместимости, соглашайтесь.

Вы можете найти файл app gradle внутри скриптов gradle в вашем проекте. Осторожно не путайте его с файлом проекта gradle!

Присваиваем значения View-элементам - 1

Вы должны добавить эту строку внутри зависимостей:

Присваиваем значения View-элементам - 2

Возможно, вам потребуется синхронизировать ваш проект после добавления этого файла:

Присваиваем значения View-элементам - 3

Поместите две картинки в папку drawable (скачать картинки можно в конце лекции), также, как Вы делали в приложении-открытке. Их можно скачать по этой ссылке.

Присваиваем значения View-элементам - 4

Шаг 3: Подключите кнопку

Подключите кнопку “Eat Cookie” (скушать печенье) так, чтоб при её нажатии картинка и текст менялись? как на иллюстрации ниже.

Присваиваем значения View-элементам - 5

Вам придётся изменить код XML для обработки нажатия на кнопку (вы уже делали это в Уроке 2 и в Практическом модуле). После этого используйте навыки, полученные в этом уроке, чтоб управлять картинкой и текстом из Java-кода. Удачи!

Присваиваем значения View-элементам - 6

Вспомогательный материал:

before_cookie.jpg
after_cookie.jpg

Свои ответы и вопросы можете оставлять в комментариях.

Комментарии (49)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
bighugеmistеr Android Developer
21 января 2022, 00:30
Но... нам не показывали, как изменять картинку. Странный курс.
Sergey Tsyrulnik
Уровень 1
16 августа 2021, 20:37
Для чего такие сложности. 2 кнопки. Показываем/не показываем. Считаем к-во нажатий кнопки и задаем условие. Если четное показуем картинку 1, текст 1, надпись кнопки 1. Иначе - картинка 2, текст 2, кнопка 2
CondrCat
Уровень 22
7 ноября 2021, 18:00
Можно и одной кнопкой обойтись, просто используем button.setText()
bighugеmistеr Android Developer
21 января 2022, 01:16
public void eatCookie(View view) {
    ImageView androidCookieImageView = (ImageView) findViewById(R.id.android_cookie_image_view);
    TextView statusTextView = (TextView) findViewById(R.id.status_text_view);
    Button functionalButton = (Button) findViewById(R.id.eat_or_spit_out_cookie_button);

    if (statusTextView.getText().equals("I'm so hungry")){
        androidCookieImageView.setImageResource(R.drawable.after_cookie);
        statusTextView.setText(R.string.status_after_button_clicked);
        functionalButton.setText(R.string.button_name_after_clicked);
    } else {
        androidCookieImageView.setImageResource(R.drawable.before_cookie);
        statusTextView.setText(R.string.status_before_button_clicked);
        functionalButton.setText(R.string.button_name_before_clicked);
    }
}
Георгий
Уровень 7
20 января 2021, 18:55
Вылетает при нажатии на кнопку в телефоне. Объясните пожалуйста в чем причина.
misha_lazarev
Уровень 34
27 мая 2022, 11:30
Значит у тебя ошибка, после выхода из приложения посмотри в logcat.
Maxim BoykinQA Automation Engineer в Wargaming
10 января 2021, 13:47
У меня вылетает при нажатии на кнопку :D
🦔 Викторведу учебный тг-канал в t.me/JavangelionExpert
1 декабря 2020, 16:43
1. Копируем разметку, код и загружаем картинки. 2. Добавлять строку в зависимости gradle НЕ нужно, неактуально. 3. В разметке добавляем кнопке атрибут onClick, значение которого ссылается на метод eatCookie. 4. В коде метода получаем текстовое представление и изображение с помощью метода findViewById. 5. С помощью методов setImageResource и setText, меняем по нажатию кнопки картинку с текстом. 6. Всё получится!
Vova Go
Уровень 6
22 апреля 2020, 16:00
невиходит изначальний код не катить (((
12 марта 2020, 12:27
У кого не получается, вот код с возвратом в исходную с исчезанием лишней кнопки.
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button1 = findViewById(R.id.button1);
    button1.setVisibility(View.INVISIBLE);
}
public void eatCookie(View view) {

    ImageView image = findViewById(R.id.android_cookie_image_view);
    image.setImageResource(R.drawable.after_cookie);

    TextView text = findViewById(R.id.status_text_view);
    text.setText("I'm so full");

    Button button = findViewById(R.id.button);
    button.setVisibility(View.INVISIBLE);

    Button button1 = findViewById(R.id.button1);
    button1.setVisibility(View.VISIBLE);

}
public void eatCookie1(View view) {

    ImageView image = findViewById(R.id.android_cookie_image_view);
    image.setImageResource(R.drawable.before_cookie);

    TextView text = findViewById(R.id.status_text_view);
    text.setText("I'm so hungry");

    Button button1 = findViewById(R.id.button1);
    button1.setVisibility(View.INVISIBLE);

    Button button = findViewById(R.id.button);
    button.setVisibility(View.VISIBLE);

}
Вторая кнопка (Back)
<Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:text="Back"
        android:onClick="eatCookie1"
        tools:ignore="OnClick"
        />
Аслан Кашиев
Уровень 1
20 апреля 2020, 18:26
Зачем выкладывать готовый код?
HokkaidoAndroid Developer в Netflix
10 мая 2024, 17:29
Благодаря этому коду удалось поэксперементировать с setVisibility(), в тз его не говорили использовать и я бы возможно этот момент с ним проморгал. Вместо INVISIBLE устанавливал GONE у себя, чтобы кнопки не прыгали вверх вниз. Кстати, для меня эта строчка в коде XML - tools:ignore="onClick" была излишня, не понимаю для чего она. Кто шарит зачем она там, дайте знать?
progr
Уровень 8
16 августа 2019, 17:37
все время путаю чем отличаются аргументы от параметров?
Александр
Уровень 14
29 августа 2019, 15:35
Не заморачивайся особо с этим... А вообще, когда ты создаешь функцию то устанавливаешь ей ПАРАМЕТРЫ: str - параметр.
public void print(String str) {...}
А когда вызываешь ее :
print("Hello World!");
"Hello World!" - это аргумент.
progr
Уровень 8
30 августа 2019, 01:26
спасибо
Name Unknown ;)
Уровень 2
1 февраля 2021, 18:48
Ты наверное уже в курсе и попривык за год-полтора, но вот картинка, которая очень наглядно показывает разницу между аргументами и параметрами (вообще не понятно, зачем наплодили два разных понятия, если можно было спокойно одним обойтись)
Ripper Jackm
Уровень 19
3 июля 2019, 14:14
Подскажите, почему когда я добавляю в приложение любую картинку, оно перестает запускаться на телефоне и сразу же закрывается?
Николай
Уровень 2
30 июля 2019, 17:24
Пост от 12 - 15 ноября 2017 не смотрели?
Renat Mukhametshin
Уровень 2
29 января 2019, 16:53
странно так и не понял зачем вот этот код compile 'com.android.support:appcompat-v7:22.1.0' сделал без него - вроде все отработало как надо
Name Unknown ;)
Уровень 2
1 февраля 2021, 18:49
То наверное в старых версиях Андроид студии надо было такие манипуляции мутить. А щас Студия уже многое делает автоматом (вон внизу сказали, что такая строчка уже присутствует) и следовательно мороки для девелоперов заметно поубавилось ;)))