Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/26: Рейтинг темы: голосов - 26, средняя оценка - 4.92
1 / 1 / 1
Регистрация: 23.05.2013
Сообщений: 22
1

Считывания ресурсов методом setBackground

30.05.2014, 12:58. Показов 5148. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сейчас занимаюсь реализацией метода для трех кнопок(одного общего метода), при нажатии на которые менялся текст и фон.
Когда использовал на каждую кнопку отдельный метод все работало отлично. Когда же один onClick() выдает ошибку в
relativeLayout.setBackground(R.color.redColor); мол, in view cannot be applied to (int), как я понял, ресурс в этот метод передаваться может только если он присвоен объекту Drawable.

Вопрос следующий: почему при общем методе для кнопок, setBackground() не принимает ресурс, а при одном методе на кнопку принимается, хотя и подчеркивается красным(да и при использовании объекта с ссылкой на ресурс тоже красным, но хоть работает)?

Тут выложу фрагмент кода работающего, с одним методом для трех кнопок.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
OnClickListener oclBtn = new OnClickListener() {
            @Override
            public void onClick(View v){
                switch (v.getId())
                {
                    case R.id.buttonRed:
                        tvInfo.setText(R.string.red);
                        Resources res0 = getResources();
                        Drawable drawable0 = res0.getDrawable(R.color.redColor);
                        relativeLayout.setBackground(drawable0);
                        break;
                    case R.id.buttonYellow:
                        tvInfo.setText(R.string.yellow);
                        Resources res1 = getResources();
                        Drawable drawable1 = res1.getDrawable(R.color.yellowColor);
                        relativeLayout.setBackground(drawable1);
                        break;
                    case R.id.buttonGreen:
                        tvInfo.setText(R.string.green);
                        Resources res2 = getResources();
                        Drawable drawable2 = res2.getDrawable(R.color.greenColor);
                        relativeLayout.setBackground(drawable2);
                        break;
                }
            }
        };
Тут код с отдельным методом для одной кнопки:
Java
1
2
3
4
5
6
7
buttonYellow.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v){
                tvInfo.setText(R.string.yellow);
                relativeLayout.setBackgroundResource(R.color.yellowColor);
            }
        });
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2014, 12:58
Ответы с готовыми решениями:

Почему .setBackground не работает?
У меня кнопки представляют собой TextView'ы, на которых по умолчанию выставлены соотв. рисунки, но...

Метод setBackground()
Приветствую. Читаю сейчас Java. Библиотека профессионала. Том 1. Основы. На странице 529 там...

Первая форма. setBackground и несколько других вопросов
Добрый вечер, набросал первую программу на Java. import javax.swing.*; import java.awt.*; ...

Решить уравнение любым методом(методом половинного деления,методом простой интеграции,методом касательных)
Решить уравнение: 0,1*x^2-x*ln(x)=0 любым методом(методом половинного деления,методом простой...

5
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
30.05.2014, 13:04 2
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
OnClickListener oclBtn = new OnClickListener() {
            @Override
            public void onClick(View v){
Resources res = getResources();                
int resId = 0;
switch (v.getId())
                {
                    case R.id.buttonRed:
                        tvInfo.setText(R.string.red);      
                        resId = R.color.redColor;
                        break;
                    case R.id.buttonYellow:
                        tvInfo.setText(R.string.yellow);
resId = R.color.yellowColor;
                        break;
                    case R.id.buttonGreen:
                        tvInfo.setText(R.string.green);
resId = R.color.greenColor;
                        break;
                }
 
if(resId != 0) {
relativeLayout.setBackgroundResource(resId);
}
 
            }
        };
0
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
30.05.2014, 13:06 3
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
switch (v.getId())
                {
                    case R.id.buttonRed:
                        tvInfo.setText(R.string.red);
                        relativeLayout.setBackground(R.color.redColor);
                        break;
                    case R.id.buttonYellow:
                        tvInfo.setText(R.string.yellow);
                        relativeLayout.setBackground(R.color.yellowColor);
                        break;
                    case R.id.buttonGreen:
                        tvInfo.setText(R.string.green);
                        relativeLayout.setBackgroundResource(R.color.greenColor);
                        break;
                }
так работает?
0
1 / 1 / 1
Регистрация: 23.05.2013
Сообщений: 22
30.05.2014, 13:09  [ТС] 4
Нет, ругает на то, что R.color.yellowColor - in view cannot be applied to (int)
0
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
30.05.2014, 13:16 5
Лучший ответ Сообщение было отмечено nilamop как решение

Решение

Цитата Сообщение от nilamop Посмотреть сообщение
Нет, ругает на то, что R.color.yellowColor - in view cannot be applied to (int)
потому что в просто setBackground передается Drawable, используйте setBackgroundResource
0
1 / 1 / 1
Регистрация: 23.05.2013
Сообщений: 22
30.05.2014, 13:51  [ТС] 6
Спасибо всем кто откликнулся и помог разобраться. Да, оказывается я просто невнимательный и не видел в своих кодах разницы между setBackground() и setBackgroundResource()

NiRamz, вам особое спасибо за "тыканьем носом" в мою ошибку И за то, что показали как можно красиво использовать в этом случае и setBackground() , но с участием Drawable, который и не выносил за пределы switch. Первый ваш пост тоже протестирован и работает
0
30.05.2014, 13:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2014, 13:51
Помогаю со студенческими работами здесь

Проверить выводимость в исчислении высказываний методом Куайна, методом редукции и методом резолюций
Проверить выводимость в исчислении высказываний методом Куайна, методом редукции и методом...

Решить уравнение методом итераций, методом ньютона и методом половинного деления
решить уравнение методом итераций,методом ньютона и методом половинного деления x-1 / (3 + sin...

Решение СЛАУ методом простой итерации, Методом Зейделя, Методом Релаксации
Всем доброго времени суток, помогите пожалуйста реализовать данные методы, а то у меня не...

Доказать клаузу методом резолюций, методом Вонга и аксиоматическим методом
Очень прошу вас помочь разобраться в доказательстве клауз этими методами. Хочется понять именно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru