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

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

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

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

30.07.2013, 18:11. Просмотров 1189. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2013, 18:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программное добавление View (Программирование Android):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
30.07.2013, 18:26 #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()
0
Yushka
4 / 4 / 1
Регистрация: 24.07.2013
Сообщений: 80
30.07.2013, 18:31 #3
Мне кажется, у вас нет отображения самого лэйаута. Например, если вы в xml внутри лэйаута что-нибудь поместите (ту же самую вьюшку), то, опять же, ничего не покажет. Я думаю, что нужно либо в этом же лэйауте (который показывает активити) добавлять, либо к другой активити привязывать второй лэйаут. Если я правильно поняла проблему.
0
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
31.07.2013, 11:32  [ТС] #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); и задается лайаут самого меню, он никак не привязан к актиаити. но если на него в дизаенере накидать элементов они прекрасно отображаются. но фишка в том, что мне нужно делать это программно.
0
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
31.07.2013, 11:44 #5
Так это другое дело. Обычно у таких библиотек помимо
Java
1
menuS.setMenu(int layoutId);//устоновка из xml
есть методы
Java
1
menuS.setMenu(View view);//устоновка из ранее созданного view
Я к чему веду, вам нужно создать view отдельно, затем его установить в меню и обновить (фактически создать меню заново). Метод может именоваться иначе, но он наверняка есть.
0
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
31.07.2013, 11:48 #6
Java
1
2
3
menuS.setMenu(R.layout.slide_menu_layout);  
SomeLayout layout = (SomeLayout)menuS.findViewById(R.id.some_layout);
layout.addView(someView);
1
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
01.08.2013, 09:59  [ТС] #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);
вот так все работает. спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2013, 09:59
Привет! Вот еще темы с ответами:

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

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

Добавление View в FrameLayout: ошибка в приложении - Программирование Android
Доброго времени суток! Хочу вот этот класс, который унаследован от View, добавить в уже созданный FrameLayout. Вот так не работает: ...

Программное создание GridLayout и добавление в него объектов - Программирование Android
Дисклеймер: Всем доброго дня! Я - новичок в написании программ под Android. Имеется небольшой опыт С++/С#, но речь не об этом. Я...


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

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

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