Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
#1

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

12.11.2013, 12:13. Просмотров 768. Ответов 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 при нажатии разных кнопок

СПасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2013, 12:13
Ответы с готовыми решениями:

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

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

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

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

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

22
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 539
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
NOSC
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
verylazy
Заблокирован
12.11.2013, 15:08 #4
а что значит "открывался layout"?
0
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 539
12.11.2013, 15:11 #5
А причем здесь другой класс. Вы хотите просто менять layout главного activivty и в зависимости от нажатой кнопки ставить нужный фон?
0
NOSC
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
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 539
12.11.2013, 15:18 #7
http://startandroid.ru/ru/uroki/vse-...ju-intent.html
0
verylazy
Заблокирован
12.11.2013, 15:19 #8
Java
1
Intent int1 = new Intent(FirstActivity.this, Second.class);
где-то после этой строки можно передать параметр (имя файла для фона или х.з. что там)
сделать это можно через putExtra, например http://developer.android.com/referen...d.os.Bundle%29
либо сделать статик поле в каком-то классе, которое будет доступно всему приложению и через него уже передавать название фона

имхо
0
NOSC
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
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
12.11.2013, 15:23 #10
под лаяутами/классами он имел ввиду активити.

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

а эти put/get extra удобно использовать когда необходимо передать данные из одного приложения в другое
лично мое мнение, если кто-то аргументированно покажет, что я не прав - скажу спасибо
0
NOSC
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
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 539
12.11.2013, 15:51 #14
verylazy, а как получаете ссылку на уже созданный экземпляр класса в другом активити или просто обращаетесь к переменной через имя класса?

Добавлено через 3 минуты
Цитата Сообщение от NOSC Посмотреть сообщение
В моем случае что тогда не правильно??
Если наведете курсор на метод setBackgroundResource, то увидите setBackgroundResource(int), а это говорит что аргумент int.
0
verylazy
Заблокирован
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
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);
но что-то мозг совсем уже вскипел. Может кто подскажет код каким должен быть в этом случае??
0
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 539
12.11.2013, 15:58 #17
R.drawable.view - это тип int и не зачем мучится со строкой.
0
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;
Сообщение об ошибке
0
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 539
12.11.2013, 16:08 #19
Ошибку в студию.
1
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>;
Всем спасибо, кто принимал участие в просветление ума =)
0
12.11.2013, 16:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2013, 16:13

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

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

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


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

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

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