Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
 
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
#1

setBackgroundResourc из соседнего класса - Программирование Android

12.11.2013, 12:13. Просмотров 672. Ответов 22
Метки нет (Все метки)

Доброго дня!
Коллеги, подскажите могу ли я сменить фон в layout из другого класса по нажатию кнопки?
Пробовал вот так:
в классе, где надо менять фон обявил переменную
Java
1
public static String s = null;
ниже указал
Java
1
2
RelativeLayout wv = (RelativeLayout)findViewById(R.id.RelativeLayout1);
        wv.setBackgroundResource(s);
На что Еклипсина соответственно ругнулась.

Предпологалось что в другом классе при отработке "слушателя нажати" переменной s дается имя R.drawable.view
Но не получилось

Каким образом мне поменять фон в layout из чужего класса??
По функционалу предполагается разный фон в одной layout при нажатии разных кнопок

СПасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2013, 12:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос setBackgroundResourc из соседнего класса (Программирование Android):

Анимация масштабирования и смещения соседнего объекта - Программирование Android
Уважаемые форумчане! Подскажите пожалуйста в какую сторону копать? Есть 2 ImageView расположенных рядом. Один из них увеличивается...

отображение кнопки из соседнего класса - Java
Доброго времени суток, может подскажете как вывести кнопку на экран ? нужен именно такой подход а не факт рисования кнопки. import...

Wi-Fi с соседнего дома - Wi-Fi
Доброго всем времени суток! Имею интернет в частном доме, организованный путём установки Wi-Fi роутера на чердаке соседней...

Bg-color соседнего элемента - HTML, CSS
как сделать чтобы при наведении на один элемент , менялся цвет фона другого? не знаю как выходит при hover на соседний элемент. ...

С соседнего <tr> удалить элемент - jQuery
Всем здрасте, каким образом можно распознать и удалить input с соседнего ( их ) &lt;tr&gt;&lt;/tr&gt; ? &lt;tr&gt; &lt;td...

Отступ от соседнего блока - HTML, CSS
Здравствуйте. Есть блок в котором четыте блока. Как сделать чтоб каждый из этих блоков одталкивался от соседнего а не от общего для всех...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
12.11.2013, 15:55  [ТС] #16
Цитата Сообщение от korsaj Посмотреть сообщение
А как получаете ссылку на уже созданный экземпляр класса в другом активити или просто обращаетесь к переменной по имени?
В класск Second есть WebView и в классе прописано:
Java
1
2
3
4
5
6
public class Second extends Activity {
    public static String s = null;
...............................................
WebView my = (WebView)findViewById(R.id.webView1);
        my.loadUrl(s);
        my.setBackgroundColor(0x00000000);
Соответственно при нажатии на кнопку в First классе
Java
1
2
3
public void onClick(View v) {
                // TODO Auto-generated method stub
                Second.s = "file:///android_asset/first.html";
По аналогии пытался сделать выше написанно, объявить переменную, открытую для обращения из других классов и менять ее, соответственно:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static String s = null;
public static String d = null;
    
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        WebView my = (WebView)findViewById(R.id.webView1);
        my.loadUrl(s);
        my.setBackgroundColor(0x00000000);
        RelativeLayout wv = (RelativeLayout)findViewById(R.id.RelativeLayout1);
        wv.setBackgroundResource(d);
    }
а в First классе прописать
Java
1
Second.d = "R.drawable.view"
Как то так. Сейчас сижу и пытаюсь вникнуть в
Java
1
Intent intent = new Intent(this, DisplayMessageActivity.class);
но что-то мозг совсем уже вскипел. Может кто подскажет код каким должен быть в этом случае??
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 510
12.11.2013, 15:58 #17
R.drawable.view - это тип int и не зачем мучится со строкой.
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
12.11.2013, 16:05  [ТС] #18
Цитата Сообщение от korsaj Посмотреть сообщение
R.drawable.view - это тип int и не зачем мучится со строкой.
Сделано было так:
Java
1
2
3
4
public static int d = (Integer) null;
..
RelativeLayout wv = (RelativeLayout)findViewById(R.id.RelativeLayout1);
        wv.setBackgroundResource(d);
При нажатии на кнопку:
Java
1
2
3
4
public void onClick(View v) {
                // TODO Auto-generated method stub
                WView.s = "file:///android_asset/first.html";
                WView.d = R.drawable.view;
Сообщение об ошибке
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 510
12.11.2013, 16:08 #19
Ошибку в студию.
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
12.11.2013, 16:13  [ТС] #20
Цитата Сообщение от korsaj Посмотреть сообщение
Ошибку в студию.
Проблема решена. ошибка вылезла потому что было:
Java
1
public static int d = null;
заменил на
Java
1
public static int d = R.drawable.view;
из другого класса теперь при нажатии спокойно отрабатывается:
Java
1
WView.d = R.drawable.<нужный drawable>;
Всем спасибо, кто принимал участие в просветление ума =)
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
13.11.2013, 00:02 #21
verylazy,
Цитата Сообщение от verylazy Посмотреть сообщение
не статик метод, а статик переменная не вижу ничего плохого в таком походе
я для себя вообще сделал класс, назвал его BlackBox и вынес в него необходимые мне глобальные переменные, которые теперь доступны из любой активити
а эти put/get extra удобно использовать когда необходимо передать данные из одного приложения в другое
лично мое мнение, если кто-то аргументированно покажет, что я не прав - скажу спасибо
плохо тем, что активити в вашем случае зависима от других классов, нельзя просто скопипастить ее в другой проект, нужно создавать там такой же BlackBox, в таком же пакете, найти все что использует эта активити в нем и перенести.

а если нужно с третьего проект, который писал другой человек, взять еще одну активити взять?
опять искать подобный класс, который здесь уже по другому называется(например Box) и опять создавать такой же класс и переносить все нужное.
а если там уже есть такой класс с такими же переменными, но они используются для других целей?
даже не заметите при переносе ничего а при выполнении код будет конфликтовать между собой в использовании этих переменных.

знаете что такое система контроля версий?
создадут два программиста глобальные переменные одинаковым именем, но для разных целей и при объединение кода останется только одна переменная и опять конфликт в коде будет.
здесь много подводных камней.

или менять код в этих активитях придется при переносе. но все должно переноситься без изменений.

а если оригинальные версии изменятся и нужно интегрировать изменения? опять таки нельзя просто удалить и скопировать новое, нужны опять танцы с бубном.

скажете что не собираетесь ничего никуда переносить? все равно лучше сразу учиться делать все правильно.

Добавлено через 3 минуты
одно из основных правил ООП: код должен минимально зависеть от другого кода, все должно быть легко-переносимым, легко-изменяемым, легко-заменяемым.

Добавлено через 6 минут
ну и статик переменная останется висеть в памяти даже если уже не нужно, если вы ее не обнулите.

Добавлено через 2 минуты
еще одно правило это минимальная доступность - все должно быть доступно только там, где используется. в идеале.
проекты пишутся множеством людей, и любой может взять и использовать вашу глобальную переменную для своих нужд, она ведь глобальная, и поломать этим ваш код.
verylazy
Заблокирован
13.11.2013, 11:09 #22
Я со всем этим согласен, не спорю. Долго размышлял над тем, как удобнее передавать параметры и решил что нагляднее и красивее все таки передавать необходимые ссылки в конструктор активити. Обычно это ссылка на другую активити.
Вполне возможно что я мнение поменяю еще не раз, такое уже было

Про систему контроля версий я слышал, но не видел. Мне пока до этих вещей очень и очень далеко.
Мне непонятно вот что - если я беру активити из другого проекта или вообще человека и передаю туда данные через putExtra то либо в этой активити уже должен быть реализован "прием" этих параметров, либо мне все равно придется там что-то переписывать (как-то же надо вытянуть все эти extras).
А если там уже это все реализовано то мне как бы и не остается другого выхода, как передавать туда через putExtra

Как тогда делают люди если все таки надо сделать глобальные переменные? Возьмем, например, имя пользователя или домашний каталог. Каждый раз когда мне надо его использовать в разных активити, надо писать что-то типа
Java
1
getExternalFilesDir(Environment.DIRECTORY_PICTURES).toString() + "/";
и присваивать какой-то переменной. Не проще ли при запуске приложения один раз записать результат куда-то и все?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
13.11.2013, 12:36 #23
Цитата Сообщение от verylazy Посмотреть сообщение
передавать необходимые ссылки в конструктор активити. Обычно это ссылка на другую активити.
код не должен получать(или иметь доступ) больше, чем ему нужно для роботы.

Цитата Сообщение от verylazy Посмотреть сообщение
то либо в этой активити уже должен быть реализован "прием" этих параметров,
да, должен быть реализован, активити не должна лезть черти куда чтобы получить адресуемые ей данные..

Цитата Сообщение от verylazy Посмотреть сообщение
имя пользователя или домашний каталог
да, подобные штуки можно засовывать в какой-нибудь класс Constants с модификатором final и их никто не сможет переопределить и использовать для других целей. это не то же самое что использовать глобальные переменные для транспортировки данных.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2013, 12:36
Привет! Вот еще темы с ответами:

Автозаполнение соседнего поля - MS Access
Доброго дня суток! Никак не могу решить, скорее всего, легкую задачу. Нужно на основе текстового ответа в соседнем поле проставить...

Заполнение столбца до уровня соседнего - VBA
Подскажите, как в excel заполнить один столбец текстовыми данными (скажем &quot;текстПоля&quot;) до того уровня, где кончаются данные в контрольном...

Maven. Jar из соседнего модуля - Java
Есть проект A, который содержит модули B и C. Что нужно сделать: с помощью maven подключить в модуль C jar-файл, который получается при...

Запрос SQL из соседнего листа - MS Excel
Здравствуйте! У меня возникла такая идея, выгружать из листа с основной БД строки по определенным критериям. Вообщем в MS Query был написан...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.11.2013, 12:36
Ответ Создать тему
Опции темы

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