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

setBackgroundResourc из соседнего класса

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

Author24 — интернет-сервис помощи студентам
Доброго дня!
Коллеги, подскажите могу ли я сменить фон в 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 при нажатии разных кнопок

СПасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.11.2013, 12:13
Ответы с готовыми решениями:

Заполнения List из соседнего класса
Добрый день, форумчане, помогите разобраться. Буду признателен. Задача: софт должен добавлять...

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

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

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

22
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
12.11.2013, 14:01 2
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class MyNewClass extends Activity {
 
    Button btn;
//====================================================================================    
    MyClass(Button btn){        
        this.btn = btn; 
    }
    
//====================================================================================  
    public int setBackground(){
            btn.setBackgroundResource(R.drawable.gray);
    }
}
//====================================================================================
Можно даже обработчик нажатий вынести в другой класс.
0
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
12.11.2013, 15:02  [ТС] 3
Цитата Сообщение от korsaj Посмотреть сообщение
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class MyNewClass extends Activity {
 
    Button btn;
//====================================================================================    
    MyClass(Button btn){        
        this.btn = btn; 
    }
    
//====================================================================================  
    public int setBackground(){
            btn.setBackgroundResource(R.drawable.gray);
    }
}
//====================================================================================
Можно даже обработчик нажатий вынести в другой класс.
Боюсь я не совсем корректно сформулировал вопрос.
Есть layout1 с кнопками и layout2, соответственно класс1 и класс2, рисунок1 и рисунок2.
Мне нужно, чтобы при нажатии кнопки1 в layout1 открывался layout2 с рисунком1 (читать background), а при нажатии кнопки2 в layout1 открывался layout2 с риснком2 в background

Надеюсь так понятней
0
Заблокирован
12.11.2013, 15:08 4
а что значит "открывался layout"?
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
12.11.2013, 15:11 5
А причем здесь другой класс. Вы хотите просто менять layout главного activivty и в зависимости от нажатой кнопки ставить нужный фон?
0
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
12.11.2013, 15:14  [ТС] 6
Цитата Сообщение от verylazy Посмотреть сообщение
а что значит "открывался layout"?
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
28
29
30
31
public class FirstActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
        final Animation animationFadein = AnimationUtils.loadAnimation(this, R.anim.fade_in);       
        final ImageView aa = (ImageView) findViewById(R.id.imageView1);
        aa.setOnClickListener(new OnClickListener() {
             
            public void onClick(View v) {
                // TODO Auto-generated method stub
                WView.s = "file:///more.html";
\\ На этом этапе я хочу установить в activity_second background1
                aa.startAnimation(animationFadein);
                Intent int1 = new Intent(FirstActivity.this, Second.class);
                startActivity(int1);
            }
        });
        final ImageView ab = (ImageView) findViewById(R.id.imageView2);
        ab.setOnClickListener(new OnClickListener() {
             
            public void onClick(View v) {
                // TODO Auto-generated method stub
                WView.s = "file:///android_asset/psichology/women.html";
\\ На этом этапе я хочу установить в activity_second background2
                ab.startAnimation(animationFadein);
                Intent int1 = new Intent(FirstActivity.this, Second.class);
                startActivity(int1);
            }
        });
Комментарии в коде посмотрите. Вроде понятно написал. Могу чего-то не знать или не так изъяснять мысли - уж простите =)
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
12.11.2013, 15:18 7
http://startandroid.ru/ru/urok... ntent.html
0
Заблокирован
12.11.2013, 15:19 8
Java
1
Intent int1 = new Intent(FirstActivity.this, Second.class);
где-то после этой строки можно передать параметр (имя файла для фона или х.з. что там)
сделать это можно через putExtra, например http://developer.android.com/r... .Bundle%29
либо сделать статик поле в каком-то классе, которое будет доступно всему приложению и через него уже передавать название фона

имхо
0
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
12.11.2013, 15:23  [ТС] 9
Цитата Сообщение от verylazy Посмотреть сообщение
либо сделать статик поле в каком-то классе, которое будет доступно всему приложению и через него уже передавать название фона
Вот такой вариант предпочтительней, но, как и написал в вопросе:
Java
1
2
3
public static String s = null;
RelativeLayout wv = (RelativeLayout)findViewById(R.id.RelativeLayout1);
        wv.setBackgroundResource(s);

Ругается на переменную s, может она просто не String должна быть? А тогда что, если не String?? Или я не в том направлении мыслю?
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
12.11.2013, 15:23 10
под лаяутами/классами он имел ввиду активити.

передавайте информацию об фоне через Intent(intent.putExtra(), intent.get<Type>Extra()).
и уже в нужной активите выставляйте фон.
http://developer.android.com/t... ivity.html
1
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
12.11.2013, 15:26 11
Цитата Сообщение от NOSC Посмотреть сообщение
Вот такой вариант предпочтительней, но, как и написал в вопросе:
Статик метод не есть хорошо..
putExtra рулит..
0
Заблокирован
12.11.2013, 15:36 12
не статик метод, а статик переменная не вижу ничего плохого в таком походе
я для себя вообще сделал класс, назвал его BlackBox и вынес в него необходимые мне глобальные переменные, которые теперь доступны из любой активити

а эти put/get extra удобно использовать когда необходимо передать данные из одного приложения в другое
лично мое мнение, если кто-то аргументированно покажет, что я не прав - скажу спасибо
0
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
12.11.2013, 15:42  [ТС] 13
Цитата Сообщение от verylazy Посмотреть сообщение
не статик метод, а статик переменная не вижу ничего плохого в таком походе
я для себя вообще сделал класс, назвал его BlackBox и вынес в него необходимые мне глобальные переменные, которые теперь доступны из любой активити

а эти put/get extra удобно использовать когда необходимо передать данные из одного приложения в другое
лично мое мнение, если кто-то аргументированно покажет, что я не прав - скажу спасибо
В моем случае что тогда не правильно??

Java
1
2
3
public static String s = null;
RelativeLayout wv = (RelativeLayout)findViewById(R.id.RelativeLayout1);
        wv.setBackgroundResource(s);
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
12.11.2013, 15:51 14
verylazy, а как получаете ссылку на уже созданный экземпляр класса в другом активити или просто обращаетесь к переменной через имя класса?

Добавлено через 3 минуты
Цитата Сообщение от NOSC Посмотреть сообщение
В моем случае что тогда не правильно??
Если наведете курсор на метод setBackgroundResource, то увидите setBackgroundResource(int), а это говорит что аргумент int.
0
Заблокирован
12.11.2013, 15:52 15
мне проще показать код, чем объяснять
класс просто создан в том же пакете, что все активити
Java
1
2
3
4
5
package ua.com.test;
 
public class BlackBox {
    static String homeDir;
}
вот, например, строковая переменная, к которой можно обратиться из любого места в коде так BlackBox.homeDir
если вам надо "расшарить" имя файла то логично сделать тип поля не String, а File к примеру
1
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);
но что-то мозг совсем уже вскипел. Может кто подскажет код каким должен быть в этом случае??
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
12.11.2013, 15:58 17
R.drawable.view - это тип int и не зачем мучится со строкой.
0
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;
Сообщение об ошибке
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
12.11.2013, 16:08 19
Ошибку в студию.
1
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>;
Всем спасибо, кто принимал участие в просветление ума =)
0
12.11.2013, 16:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2013, 16:13
Помогаю со студенческими работами здесь

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

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

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

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


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

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