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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
#1

Программное добавление View - Android

30.07.2013, 18:11. Просмотров 1126. Ответов 6
Метки нет (Все метки)

Доброго времени. Знаю что на эту тему много инфы, как на форуме так и на других ресурсах, но решения своей проблемы все же не нашел. суть вот в чем. есть активити в которую я могу добавлять View в её layout, для этого получаю сам layout:
Java
1
RelativeLayout layout = (RelativeLayout)findViewById(R.id.main);
и добавляю свой (раннее созданный) View:
Java
1
layout.addView(testBar,layoutParams);
здесь все работает прекрасно.
НО!
есть отдельный Layout:
XML
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main2"
    android:layout_width="fill_parent"
    android:background="@android:color/white"
    android:layout_height="fill_parent"
    android:orientation="vertical" >         
 
</RelativeLayout>
который не принадлежит никакой активити. мне в него тоже нужно из этой же активити добавить View. но при попытке получить к нему доступ таким способом:
Java
1
RelativeLayout layout2 = (RelativeLayout)findViewById(R.id.main2);
возвращает null.
я нашел как получить к нему доступ:
Java
1
RelativeLayout layout3  = (RelativeLayout) LayoutInflater.from(getApplicationContext()).inflate(R.layout.main2, null );
но тогда при добавлении на этот layout своего View - визуально он не отображается, хотя добавление проходит без ошибок.
в чем ошибка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
30.07.2013, 18:26     Программное добавление View #2
Если Layout не принадлежит Activity, то findViewById(R.id.main2) вернёт null, так как его нет на Activity.
Если вы делаете LayoutInflater.from(getApplicationContext()).inflate(R.layout.main2, null), создавая view и добавляя в него элементы, то он не отобразиться визуально, ибо его нет на Activity.

В первом случае добавьте RelativeLayout в xml Activity.
Во втором: добавьте созданный layout3 на Activity через addView()
Yushka
4 / 4 / 1
Регистрация: 24.07.2013
Сообщений: 80
30.07.2013, 18:31     Программное добавление View #3
Мне кажется, у вас нет отображения самого лэйаута. Например, если вы в xml внутри лэйаута что-нибудь поместите (ту же самую вьюшку), то, опять же, ничего не покажет. Я думаю, что нужно либо в этом же лэйауте (который показывает активити) добавлять, либо к другой активити привязывать второй лэйаут. Если я правильно поняла проблему.
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
31.07.2013, 11:32  [ТС]     Программное добавление View #4
Цитата Сообщение от Wenceslaus Посмотреть сообщение
Если Layout не принадлежит Activity, то findViewById(R.id.main2) вернёт null, так как его нет на Activity.
да, именно так и происходит.
но тут идея вот в чем, расскажу подробней, может так будет понятней. я использую очень интересную библиотеку SlidingMenu и вот там создается обычное активити и к нему подгружается это SlidingMenu примерно вот так:
Java
1
2
3
4
5
6
7
8
9
10
11
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tabs);                      
        menuS = new SlidingMenu(this);              
        menuS.setMode(SlidingMenu.LEFT);
        menuS.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);      
        menuS.setBehindOffset(20);
        menuS.setFadeDegree(0.5f);              
        menuS.attachToActivity(this, SlidingMenu.SLIDING_WINDOW);
        menuS.setMenu(R.layout.slide_menu_layout);  
}
и как видно в строчке menuS.setMenu(R.layout.slide_menu_layout); и задается лайаут самого меню, он никак не привязан к актиаити. но если на него в дизаенере накидать элементов они прекрасно отображаются. но фишка в том, что мне нужно делать это программно.
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
31.07.2013, 11:44     Программное добавление View #5
Так это другое дело. Обычно у таких библиотек помимо
Java
1
menuS.setMenu(int layoutId);//устоновка из xml
есть методы
Java
1
menuS.setMenu(View view);//устоновка из ранее созданного view
Я к чему веду, вам нужно создать view отдельно, затем его установить в меню и обновить (фактически создать меню заново). Метод может именоваться иначе, но он наверняка есть.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
31.07.2013, 11:48     Программное добавление View #6
Java
1
2
3
menuS.setMenu(R.layout.slide_menu_layout);  
SomeLayout layout = (SomeLayout)menuS.findViewById(R.id.some_layout);
layout.addView(someView);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2013, 09:59     Программное добавление View
Еще ссылки по теме:

Программное добавление рамки Layout Android
Программное добавление элементов Android
Android Программное добавление View элементов в Fragment
View во фрагментах Android
Android Программное добавление View

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

Или воспользуйтесь поиском по форуму:
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
01.08.2013, 09:59  [ТС]     Программное добавление View #7
Цитата Сообщение от V0v1k Посмотреть сообщение
Java
1
2
3
menuS.setMenu(R.layout.slide_menu_layout);  
SomeLayout layout = (SomeLayout)menuS.findViewById(R.id.some_layout);
layout.addView(someView);
вот так все работает. спасибо
Yandex
Объявления
01.08.2013, 09:59     Программное добавление View
Ответ Создать тему
Опции темы

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