С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
nilamop
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 22
#1

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

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

Сейчас занимаюсь реализацией метода для трех кнопок(одного общего метода), при нажатии на которые менялся текст и фон.
Когда использовал на каждую кнопку отдельный метод все работало отлично. Когда же один 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2014, 12:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считывания ресурсов методом setBackground (Программирование Android):

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

Инструментарий Java для считывания PDF файла в программу - Программирование Android
Как прочитать pdf файл в программу?? Какие есть для этого инструменты java?? Можете привести фрагмент кода или пример чтения данных из pdf...

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

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

Проверить выводимость в исчислении высказываний методом Куайна, методом редукции и методом резолюций - Логика и множества
Проверить выводимость в исчислении высказываний методом Куайна, методом редукции и методом резолюций. Я решил так. Не уверен что правильно....

Решить уравнение методом итераций, методом ньютона и методом половинного деления - C#
решить уравнение методом итераций,методом ньютона и методом половинного деления x-1 / (3 + sin (3.6*x)) = 0 интервал изоляции корня...

5
NiRamz
211 / 211 / 16
Регистрация: 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
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 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
nilamop
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 22
30.05.2014, 13:09  [ТС] #4
Нет, ругает на то, что R.color.yellowColor - in view cannot be applied to (int)
0
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
30.05.2014, 13:16 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от nilamop Посмотреть сообщение
Нет, ругает на то, что R.color.yellowColor - in view cannot be applied to (int)
потому что в просто setBackground передается Drawable, используйте setBackgroundResource
0
nilamop
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 22
30.05.2014, 13:51  [ТС] #6
Спасибо всем кто откликнулся и помог разобраться. Да, оказывается я просто невнимательный и не видел в своих кодах разницы между setBackground() и setBackgroundResource()

NiRamz, вам особое спасибо за "тыканьем носом" в мою ошибку И за то, что показали как можно красиво использовать в этом случае и setBackground() , но с участием Drawable, который и не выносил за пределы switch. Первый ваш пост тоже протестирован и работает
0
30.05.2014, 13:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2014, 13:51
Привет! Вот еще темы с ответами:

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

Отсортировать массив методом выбора, методом вставки и методом Хоара - C (СИ)
Задан двумерный массив.Получить одномерный массив, состоящий из минимальных элементов строк двумерного массива.Полученный массив...

Масивы и сортировка методом обмена, методом вставки, методом выбора - Turbo Pascal
Сортировку осуществить тремя способами: методом обмена. методом вставки, методом выбора.Решение записать в отдельную программу. Заполнить...

считывания с БД - PHP БД
вот у меня есть 100 тем в БД которые надо вывести но надо сделать так что б было типа на одну страницу 10 тем, и стрелочка в низу типа...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.