Страница 1 из 2
динамическое создание View с уникальными Id
Добавлено: 09 апр 2015, 15:29
slbel
Доброго всем времени суток!
Нужно динамически создавать и добавлять на экран View. При этом нужно, получать уникальные Id, для каждого элемента, с тем чтобы потом получить доступ к ним по FindViewById().
View элементы планируется создавать либо вручную, либо с помощью Inflater (еще не решил, что лучше). В момент компиляции программы я еще не знаю сколько у меня будет View.
Проблема выглядит примерно так:
Код: Выделить всё
LayoutInflater ltInflater = getLayoutInflater();
View view = ltInflater.inflate(R.layout.param_item, tabParams, false);
view.setId(???);
// здесь мне нужно как-то сгенерировать уникальный ресурс для присвоения Id
// или (как вариант) - пусть система создает сама уникальный Id, а получать его с помощью
view.getId(); // здесь мне разницы нет
tabParams.addView(view);
// Далее этот Id запоминается в программе. И когда необходимо изменить View, делается его поиск с помощью
View view = findViewById(???);
Re: динамическое создание View с уникальными Id
Добавлено: 09 апр 2015, 15:34
Foenix
как будет выглядеть экран, чтоэ то за view?
Re: динамическое создание View с уникальными Id
Добавлено: 09 апр 2015, 16:32
doter.ua
Лол что? динамически созданные вью сохраняются ссылками на объект.
btn1 = Button(...);
btn1 - объект(ссылка на него).
Re: динамическое создание View с уникальными Id
Добавлено: 09 апр 2015, 16:48
slbel
решил проблему через View.setTag("Id")
Re: динамическое создание View с уникальными Id
Добавлено: 09 апр 2015, 16:54
slbel
Foenix писал(а):как будет выглядеть экран, чтоэ то за view?
примерно так:
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
/>
<!-- android:id="@+id/ParamName" -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
/>
<!-- android:id="@+id/ParamValue" -->
</LinearLayout>
Правда отображение корявое значения параметров налипают к именам параметров. Значения параметров обновляются динамически при подключении к устройству (по USB или БТ)
Нужно что-то другое, подумываю о таблице, но тогда в одной из строк таблицы будет тоже самое. Как отодвинуть значения параметров от из наименований?
Кол-во и наименования параметров зависят от подключенного устройства.
Re: динамическое создание View с уникальными Id
Добавлено: 09 апр 2015, 16:57
Foenix
рисунок можно посмотреть?
зачем там динамические вью? листвью можно взять в общем случае
тут каждый новичок почему-то старается динамически создавать вьюшки, хотя это требуется ОЧЕНЬ редко.
Re: динамическое создание View с уникальными Id
Добавлено: 09 апр 2015, 16:58
slbel
doter.ua писал(а):Лол что? динамически созданные вью сохраняются ссылками на объект.
btn1 = Button(...);
btn1 - объект(ссылка на него).
Можно и так, как-то не подумал об этом. Но тогда где-то придется еще хранить эти ссылки. Насколько быстро выполняется поиск View с помощью метода FindViewByTag("Id")?
Re: динамическое создание View с уникальными Id
Добавлено: 09 апр 2015, 17:12
slbel
Foenix писал(а):рисунок можно посмотреть?
зачем там динамические вью? листвью можно взять в общем случае
тут каждый новичок почему-то старается динамически создавать вьюшки, хотя это требуется ОЧЕНЬ редко.
Как-то так. Динамически потому, что я не знаю их в момент компиляции, только после подключения к устройству, а типов устройств много.
http://hostingkartinok.com/show-image.p ... 10a0aeec6f
Re: динамическое создание View с уникальными Id
Добавлено: 09 апр 2015, 17:34
doter.ua
slbel писал(а):doter.ua писал(а):Лол что? динамически созданные вью сохраняются ссылками на объект.
btn1 = Button(...);
btn1 - объект(ссылка на него).
Можно и так, как-то не подумал об этом. Но тогда где-то придется еще хранить эти ссылки. Насколько быстро выполняется поиск View с помощью метода FindViewByTag("Id")?
Поиск по ид довольно таки ресурсоемкий, существует даже паттерн с холдерами, чтобы избегать лишние поиски по ид, решая проблему тем же хранением ссылок на объект.
Просто объявляйте объект\массив_объектов на уровне класса
Код: Выделить всё
class ivan.. {
myButton btn;
onCreate(){
btn = ...
}
}
Re: динамическое создание View с уникальными Id
Добавлено: 09 апр 2015, 18:02
slbel
doter.ua писал(а):
Просто объявляйте объект\массив_объектов на уровне класса
Спасибо, так и сделаем.
Переделал на TableLayout с TableRow с тремя столбцами (средний dummy с фиксированной шириной). Стало гораздо лучше. На первое время сойдет, красивости - потом.
Re: динамическое создание View с уникальными Id
Добавлено: 09 апр 2015, 23:11
Foenix
slbel писал(а):Foenix писал(а):рисунок можно посмотреть?
зачем там динамические вью? листвью можно взять в общем случае
тут каждый новичок почему-то старается динамически создавать вьюшки, хотя это требуется ОЧЕНЬ редко.
Как-то так. Динамически потому, что я не знаю их в момент компиляции, только после подключения к устройству, а типов устройств много.
http://hostingkartinok.com/show-image.p ... 10a0aeec6f
да заполняй массив значений и делай листвью, в чем проблема-то? это самая стандартная задача из всех стандартных каждодневных задач. Тут динамическое создание вообще не нужно. И вредно. И такой код не показывай никому.
Re: динамическое создание View с уникальными Id
Добавлено: 10 апр 2015, 07:58
slbel
Foenix писал(а):
да заполняй массив значений и делай листвью, в чем проблема-то? это самая стандартная задача из всех стандартных каждодневных задач. Тут динамическое создание вообще не нужно. И вредно. И такой код не показывай никому.
Спасибо за идею, будем смотреть что собой представляет ListView.
Параметры и события с ListView возможны. Но на остальных двух в скроллируемом списке должны быть элементы для редактирования: EditText, CheckBox и нужен еще View для выбора значений из выпадающего списка определенных значений (даже пока не знаю как это называется

) .
Опыт у меня в андроиде пока никакой, поэтому я не знаю сумею ли я написать пока свой адаптер для такого ListView. Мне кажется, что гораздо проще работать с отдельными элементами, т.к., например, для значений параметров, мне достаточно просто менять текущее значение, чем каждый раз городить строки, состоящие из имен параметров и значений. Кроме того, не совсем ясно, как выполнять выравнивание значений параметров в одну линию по вертикали, с учетом разной длины наименований параметров.
Как-то так.
PS: Да и еще, при очередном отображений значений (а это будет выполняться каждые полсекунды) я должен удалять View элементы, и снова создавать. Это довольно ресурсоемко. Гораздо проще один раз создавать View и обновлять его свойство Text.
Re: динамическое создание View с уникальными Id
Добавлено: 10 апр 2015, 08:07
Foenix
ты же кастомную строку будешь делать, при этом по вертикали оно само выровняется, так же как и в гридвью - проблем тут вообще нет.
ПРичем тут "городить строки " тоже не понимаю - почитай урок о кастомном листвью лучше.
Re: динамическое создание View с уникальными Id
Добавлено: 10 апр 2015, 08:25
slbel
Foenix писал(а):ты же кастомную строку будешь делать, при этом по вертикали оно само выровняется, так же как и в гридвью - проблем тут вообще нет.
ПРичем тут "городить строки " тоже не понимаю - почитай урок о кастомном листвью лучше.
Еще раз, я только учусь

И слабо представляю возможности визуальных компонентов андроида.
PS: прикол слово "андроид" редактор подчеркивает красным

Re: динамическое создание View с уникальными Id
Добавлено: 10 апр 2015, 08:32
Foenix
вот мне интересно - как можно уже чего-то делать не изучив ну самую малость?
перед тем, как писать что-то, нужно изучить сайт девелоперов по дизайну приложений - ну хотя бы картинки посмотреть! Там основа такая, база - это гайдлайны, не нужно изобретать - там написано как правильно, написано - какие визуальные компоненты нужно использовать.
http://developer.android.com/design/patterns/new.html
гридвью вообще используется достаточно редко, а теперь еще реже, т.к. новые компоненты появились. И все это появляется с такой скоростью, что пока ты будешь изобретать велосипед - жизнь уйдет далеко вперед и никогда не нагонишь.
Re: динамическое создание View с уникальными Id
Добавлено: 10 апр 2015, 08:49
slbel
Foenix писал(а):вот мне интересно - как можно уже чего-то делать не изучив ну самую малость?
перед тем, как писать что-то, нужно изучить сайт девелоперов по дизайну приложений - ну хотя бы картинки посмотреть! Там основа такая, база - это гайдлайны, не нужно изобретать - там написано как правильно, написано - какие визуальные компоненты нужно использовать.
http://developer.android.com/design/patterns/new.html
гридвью вообще используется достаточно редко, а теперь еще реже, т.к. новые компоненты появились. И все это появляется с такой скоростью, что пока ты будешь изобретать велосипед - жизнь уйдет далеко вперед и никогда не нагонишь.
Согласен, пока буду изучать теперешние элементы, жизнь уйдет далеко вперед

Мне нужно быстро сделать работающий первый вариант программы, красивости - потом. Поэтому я начинаю с базовых View.
Да, подскажите кто-нибудь, как называется элемент для выбора значения из выпадающего списка определенных значений (в Delphi он называется ComboBox).
Re: динамическое создание View с уникальными Id
Добавлено: 10 апр 2015, 09:12
Foenix
spinner
Re: динамическое создание View с уникальными Id
Добавлено: 10 апр 2015, 09:13
Foenix
Но опять же)) он не всегда используется и гораздо реже, чем в дельфи))
и в список его совать не вздумай
Re: динамическое создание View с уникальными Id
Добавлено: 10 апр 2015, 09:17
slbel
Foenix писал(а):Но опять же)) он не всегда используется и гораздо реже, чем в дельфи))
и в список его совать не вздумай
Пока собираюсь его засунуть в TableRow (TableView). Впрочем также с чекбоксом и EditText. Мне пока так проще, чем городить кастом ListView.
Re: динамическое создание View с уникальными Id
Добавлено: 10 апр 2015, 09:35
Foenix
зря
это вообще неправильный подход, просто вкорне неверный. Мне уже надоело объяснять.
Просто посмотри другие приложения и найди хотя бы одно такое (из профессиональных) где есть спинер в списке - я думаю ты вряд ли найдешь. А с таблицами и подавно - они крайне редко используются причем для довольно специфических целей.