динамическое создание View с уникальными Id

Интерфейс, диалоги, темы, стили, меню
slbel
Сообщения: 36
Зарегистрирован: 31 мар 2015, 13:25

динамическое создание View с уникальными Id

Сообщение slbel » 09 апр 2015, 15:29

Доброго всем времени суток!

Нужно динамически создавать и добавлять на экран 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(???);

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: динамическое создание View с уникальными Id

Сообщение Foenix » 09 апр 2015, 15:34

как будет выглядеть экран, чтоэ то за view?
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: динамическое создание View с уникальными Id

Сообщение doter.ua » 09 апр 2015, 16:32

Лол что? динамически созданные вью сохраняются ссылками на объект.
btn1 = Button(...);
btn1 - объект(ссылка на него).
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

slbel
Сообщения: 36
Зарегистрирован: 31 мар 2015, 13:25

Re: динамическое создание View с уникальными Id

Сообщение slbel » 09 апр 2015, 16:48

решил проблему через View.setTag("Id")

slbel
Сообщения: 36
Зарегистрирован: 31 мар 2015, 13:25

Re: динамическое создание View с уникальными Id

Сообщение slbel » 09 апр 2015, 16:54

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 или БТ)

Нужно что-то другое, подумываю о таблице, но тогда в одной из строк таблицы будет тоже самое. Как отодвинуть значения параметров от из наименований?

Кол-во и наименования параметров зависят от подключенного устройства.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: динамическое создание View с уникальными Id

Сообщение Foenix » 09 апр 2015, 16:57

рисунок можно посмотреть?
зачем там динамические вью? листвью можно взять в общем случае
тут каждый новичок почему-то старается динамически создавать вьюшки, хотя это требуется ОЧЕНЬ редко.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

slbel
Сообщения: 36
Зарегистрирован: 31 мар 2015, 13:25

Re: динамическое создание View с уникальными Id

Сообщение slbel » 09 апр 2015, 16:58

doter.ua писал(а):Лол что? динамически созданные вью сохраняются ссылками на объект.
btn1 = Button(...);
btn1 - объект(ссылка на него).
Можно и так, как-то не подумал об этом. Но тогда где-то придется еще хранить эти ссылки. Насколько быстро выполняется поиск View с помощью метода FindViewByTag("Id")?

slbel
Сообщения: 36
Зарегистрирован: 31 мар 2015, 13:25

Re: динамическое создание View с уникальными Id

Сообщение slbel » 09 апр 2015, 17:12

Foenix писал(а):рисунок можно посмотреть?
зачем там динамические вью? листвью можно взять в общем случае
тут каждый новичок почему-то старается динамически создавать вьюшки, хотя это требуется ОЧЕНЬ редко.
Как-то так. Динамически потому, что я не знаю их в момент компиляции, только после подключения к устройству, а типов устройств много.

http://hostingkartinok.com/show-image.p ... 10a0aeec6f

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: динамическое создание View с уникальными Id

Сообщение doter.ua » 09 апр 2015, 17:34

slbel писал(а):
doter.ua писал(а):Лол что? динамически созданные вью сохраняются ссылками на объект.
btn1 = Button(...);
btn1 - объект(ссылка на него).
Можно и так, как-то не подумал об этом. Но тогда где-то придется еще хранить эти ссылки. Насколько быстро выполняется поиск View с помощью метода FindViewByTag("Id")?
Поиск по ид довольно таки ресурсоемкий, существует даже паттерн с холдерами, чтобы избегать лишние поиски по ид, решая проблему тем же хранением ссылок на объект.
Просто объявляйте объект\массив_объектов на уровне класса

Код: Выделить всё

class ivan.. {

   myButton btn;

   onCreate(){
      btn = ...
   }
   
}
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

slbel
Сообщения: 36
Зарегистрирован: 31 мар 2015, 13:25

Re: динамическое создание View с уникальными Id

Сообщение slbel » 09 апр 2015, 18:02

doter.ua писал(а): Просто объявляйте объект\массив_объектов на уровне класса
Спасибо, так и сделаем.

Переделал на TableLayout с TableRow с тремя столбцами (средний dummy с фиксированной шириной). Стало гораздо лучше. На первое время сойдет, красивости - потом.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: динамическое создание View с уникальными Id

Сообщение Foenix » 09 апр 2015, 23:11

slbel писал(а):
Foenix писал(а):рисунок можно посмотреть?
зачем там динамические вью? листвью можно взять в общем случае
тут каждый новичок почему-то старается динамически создавать вьюшки, хотя это требуется ОЧЕНЬ редко.
Как-то так. Динамически потому, что я не знаю их в момент компиляции, только после подключения к устройству, а типов устройств много.

http://hostingkartinok.com/show-image.p ... 10a0aeec6f
да заполняй массив значений и делай листвью, в чем проблема-то? это самая стандартная задача из всех стандартных каждодневных задач. Тут динамическое создание вообще не нужно. И вредно. И такой код не показывай никому.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

slbel
Сообщения: 36
Зарегистрирован: 31 мар 2015, 13:25

Re: динамическое создание View с уникальными Id

Сообщение slbel » 10 апр 2015, 07:58

Foenix писал(а): да заполняй массив значений и делай листвью, в чем проблема-то? это самая стандартная задача из всех стандартных каждодневных задач. Тут динамическое создание вообще не нужно. И вредно. И такой код не показывай никому.
Спасибо за идею, будем смотреть что собой представляет ListView.

Параметры и события с ListView возможны. Но на остальных двух в скроллируемом списке должны быть элементы для редактирования: EditText, CheckBox и нужен еще View для выбора значений из выпадающего списка определенных значений (даже пока не знаю как это называется :)) .

Опыт у меня в андроиде пока никакой, поэтому я не знаю сумею ли я написать пока свой адаптер для такого ListView. Мне кажется, что гораздо проще работать с отдельными элементами, т.к., например, для значений параметров, мне достаточно просто менять текущее значение, чем каждый раз городить строки, состоящие из имен параметров и значений. Кроме того, не совсем ясно, как выполнять выравнивание значений параметров в одну линию по вертикали, с учетом разной длины наименований параметров.
Как-то так.

PS: Да и еще, при очередном отображений значений (а это будет выполняться каждые полсекунды) я должен удалять View элементы, и снова создавать. Это довольно ресурсоемко. Гораздо проще один раз создавать View и обновлять его свойство Text.
Последний раз редактировалось slbel 10 апр 2015, 08:10, всего редактировалось 1 раз.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: динамическое создание View с уникальными Id

Сообщение Foenix » 10 апр 2015, 08:07

ты же кастомную строку будешь делать, при этом по вертикали оно само выровняется, так же как и в гридвью - проблем тут вообще нет.
ПРичем тут "городить строки " тоже не понимаю - почитай урок о кастомном листвью лучше.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

slbel
Сообщения: 36
Зарегистрирован: 31 мар 2015, 13:25

Re: динамическое создание View с уникальными Id

Сообщение slbel » 10 апр 2015, 08:25

Foenix писал(а):ты же кастомную строку будешь делать, при этом по вертикали оно само выровняется, так же как и в гридвью - проблем тут вообще нет.
ПРичем тут "городить строки " тоже не понимаю - почитай урок о кастомном листвью лучше.
Еще раз, я только учусь :) И слабо представляю возможности визуальных компонентов андроида.

PS: прикол слово "андроид" редактор подчеркивает красным :)

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: динамическое создание View с уникальными Id

Сообщение Foenix » 10 апр 2015, 08:32

вот мне интересно - как можно уже чего-то делать не изучив ну самую малость?
перед тем, как писать что-то, нужно изучить сайт девелоперов по дизайну приложений - ну хотя бы картинки посмотреть! Там основа такая, база - это гайдлайны, не нужно изобретать - там написано как правильно, написано - какие визуальные компоненты нужно использовать.
http://developer.android.com/design/patterns/new.html
гридвью вообще используется достаточно редко, а теперь еще реже, т.к. новые компоненты появились. И все это появляется с такой скоростью, что пока ты будешь изобретать велосипед - жизнь уйдет далеко вперед и никогда не нагонишь.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

slbel
Сообщения: 36
Зарегистрирован: 31 мар 2015, 13:25

Re: динамическое создание View с уникальными Id

Сообщение slbel » 10 апр 2015, 08:49

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

Да, подскажите кто-нибудь, как называется элемент для выбора значения из выпадающего списка определенных значений (в Delphi он называется ComboBox).

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: динамическое создание View с уникальными Id

Сообщение Foenix » 10 апр 2015, 09:12

spinner
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: динамическое создание View с уникальными Id

Сообщение Foenix » 10 апр 2015, 09:13

Но опять же)) он не всегда используется и гораздо реже, чем в дельфи))
и в список его совать не вздумай
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

slbel
Сообщения: 36
Зарегистрирован: 31 мар 2015, 13:25

Re: динамическое создание View с уникальными Id

Сообщение slbel » 10 апр 2015, 09:17

Foenix писал(а):Но опять же)) он не всегда используется и гораздо реже, чем в дельфи))
и в список его совать не вздумай
Пока собираюсь его засунуть в TableRow (TableView). Впрочем также с чекбоксом и EditText. Мне пока так проще, чем городить кастом ListView.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: динамическое создание View с уникальными Id

Сообщение Foenix » 10 апр 2015, 09:35

зря
это вообще неправильный подход, просто вкорне неверный. Мне уже надоело объяснять.
Просто посмотри другие приложения и найди хотя бы одно такое (из профессиональных) где есть спинер в списке - я думаю ты вряд ли найдешь. А с таблицами и подавно - они крайне редко используются причем для довольно специфических целей.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить