Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1

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

30.07.2013, 18:11. Показов 3615. Ответов 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 - визуально он не отображается, хотя добавление проходит без ошибок.
в чем ошибка?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.07.2013, 18:11
Ответы с готовыми решениями:

Программное добавление View
Всем привет! У меня в роли setContentView выступает класс Draw2D, в котором я собираюсь рисовать кое-какую графику. Графика рисуется...

Программное добавление View
Не могу разобраться: нужно программно прилепить н-ное количество вьюх. Делаю так: Dialog dialog = new Dialog(pd.getContext()); ...

Программное добавление View элементов в Fragment
Здравствуйте. Проблема такая: в приложении есть 2 вкладки. Переключение между ними реализуются через ViewPager и FragmentStatePagerAdapter....

6
Android Developer
 Аватар для Wenceslaus
131 / 131 / 6
Регистрация: 05.07.2013
Сообщений: 205
30.07.2013, 18:26
Если Layout не принадлежит Activity, то findViewById(R.id.main2) вернёт null, так как его нет на Activity.
Если вы делаете LayoutInflater.from(getApplicationContex t()).inflate(R.layout.main2, null), создавая view и добавляя в него элементы, то он не отобразиться визуально, ибо его нет на Activity.

В первом случае добавьте RelativeLayout в xml Activity.
Во втором: добавьте созданный layout3 на Activity через addView()
0
4 / 4 / 0
Регистрация: 24.07.2013
Сообщений: 80
30.07.2013, 18:31
Мне кажется, у вас нет отображения самого лэйаута. Например, если вы в xml внутри лэйаута что-нибудь поместите (ту же самую вьюшку), то, опять же, ничего не покажет. Я думаю, что нужно либо в этом же лэйауте (который показывает активити) добавлять, либо к другой активити привязывать второй лэйаут. Если я правильно поняла проблему.
0
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
31.07.2013, 11:32  [ТС]
Цитата Сообщение от 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 ); и задается лайаут самого меню, он никак не привязан к актиаити. но если на него в дизаенере накидать элементов они прекрасно отображаются. но фишка в том, что мне нужно делать это программно.
0
Android Developer
 Аватар для Wenceslaus
131 / 131 / 6
Регистрация: 05.07.2013
Сообщений: 205
31.07.2013, 11:44
Так это другое дело. Обычно у таких библиотек помимо
Java
1
menuS.setMenu(int layoutId);//устоновка из xml
есть методы
Java
1
menuS.setMenu(View view);//устоновка из ранее созданного view
Я к чему веду, вам нужно создать view отдельно, затем его установить в меню и обновить (фактически создать меню заново). Метод может именоваться иначе, но он наверняка есть.
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
31.07.2013, 11:48
Java
1
2
3
menuS.setMenu(R.layout.slide_menu_layout);  
SomeLayout layout = (SomeLayout)menuS.findViewById(R.id.some_layout);
layout.addView(someView);
1
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
01.08.2013, 09:59  [ТС]
Цитата Сообщение от V0v1k Посмотреть сообщение
Java
1
2
3
menuS.setMenu(R.layout.slide_menu_layout);  
SomeLayout layout = (SomeLayout)menuS.findViewById(R.id.some_layout);
layout.addView(someView);
вот так все работает. спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.08.2013, 09:59
Помогаю со студенческими работами здесь

Программное добавление элементов
Уважаемы подскажите такую ситуацию, не могу немного понять...Как на Relative разметке программно добавлять элементы, чтобы их можно было...

Программное добавление рамки Layout
Добавляю рамку к Layout с помощью XML файла: &lt;shape xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&gt; &lt;stroke...

Программное добавление строкового ресурса
Здравствуйте! Я храню данные для ListView в XML-файле строковых ресурсов: &lt;string-array name=&quot;cat_names&quot;&gt; ...

Добавление View (кнопки) в PreferenceScreen
Здравствуйте! не получается добавить View (кнопку) в общую структуру PreferenceScreen, через this.addContentView добавляется, но...

Добавление элемента - наследника View
Здравствуйте. Пишу для Android простенькую игрушку. Для нее мне понадобилось написать класс, рисующий круг - наследник View. На экране...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru