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

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

Курс "Программирование под Андроид"
8 уровень , 21 лекция
Открыта

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

Итак, мы ознакомились с несколькими примерами того, как использовать метод 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 Уровень 15
21 января 2022
Но... нам не показывали, как изменять картинку. Странный курс.
Sergey Tsyrulnik Уровень 1
16 августа 2021
Для чего такие сложности. 2 кнопки. Показываем/не показываем. Считаем к-во нажатий кнопки и задаем условие. Если четное показуем картинку 1, текст 1, надпись кнопки 1. Иначе - картинка 2, текст 2, кнопка 2
CondrCat Уровень 22
7 ноября 2021
Можно и одной кнопкой обойтись, просто используем button.setText()
bighugеmistеr Уровень 15
21 января 2022

    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
Вылетает при нажатии на кнопку в телефоне. Объясните пожалуйста в чем причина.
misha_lazarev Уровень 34
27 мая 2022
Значит у тебя ошибка, после выхода из приложения посмотри в logcat.
Maxim Boykin Уровень 22
10 января 2021
У меня вылетает при нажатии на кнопку :D
🦔 Виктор Уровень 20 Expert
1 декабря 2020
1. Копируем разметку, код и загружаем картинки. 2. Добавлять строку в зависимости gradle НЕ нужно, неактуально. 3. В разметке добавляем кнопке атрибут onClick, значение которого ссылается на метод eatCookie. 4. В коде метода получаем текстовое представление и изображение с помощью метода findViewById. 5. С помощью методов setImageResource и setText, меняем по нажатию кнопки картинку с текстом. 6. Всё получится!
Vova Go Уровень 6
22 апреля 2020
невиходит изначальний код не катить (((
12 марта 2020
У кого не получается, вот код с возвратом в исходную с исчезанием лишней кнопки.

    @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"
        />
Аслан Кашиев Уровень 22
20 апреля 2020
Зачем выкладывать готовый код?
Hokkaido Уровень 2
10 мая 2024
Благодаря этому коду удалось поэксперементировать с setVisibility(), в тз его не говорили использовать и я бы возможно этот момент с ним проморгал. Вместо INVISIBLE устанавливал GONE у себя, чтобы кнопки не прыгали вверх вниз. Кстати, для меня эта строчка в коде XML - tools:ignore="onClick" была излишня, не понимаю для чего она. Кто шарит зачем она там, дайте знать?
progr Уровень 8
16 августа 2019
все время путаю чем отличаются аргументы от параметров?
Александр Уровень 14
29 августа 2019
Не заморачивайся особо с этим... А вообще, когда ты создаешь функцию то устанавливаешь ей ПАРАМЕТРЫ: str - параметр.

public void print(String str) {...}
А когда вызываешь ее :

print("Hello World!");
"Hello World!" - это аргумент.
progr Уровень 8
30 августа 2019
спасибо
Name Unknown ;) Уровень 2
1 февраля 2021
Ты наверное уже в курсе и попривык за год-полтора, но вот картинка, которая очень наглядно показывает разницу между аргументами и параметрами (вообще не понятно, зачем наплодили два разных понятия, если можно было спокойно одним обойтись)
Ripper Jackm Уровень 19
3 июля 2019
Подскажите, почему когда я добавляю в приложение любую картинку, оно перестает запускаться на телефоне и сразу же закрывается?
Николай Уровень 2
30 июля 2019
Пост от 12 - 15 ноября 2017 не смотрели?
Renat Mukhametshin Уровень 2
29 января 2019
странно так и не понял зачем вот этот код compile 'com.android.support:appcompat-v7:22.1.0' сделал без него - вроде все отработало как надо
Name Unknown ;) Уровень 2
1 февраля 2021
То наверное в старых версиях Андроид студии надо было такие манипуляции мутить. А щас Студия уже многое делает автоматом (вон внизу сказали, что такая строчка уже присутствует) и следовательно мороки для девелоперов заметно поубавилось ;)))