Страница 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
зря
это вообще неправильный подход, просто вкорне неверный. Мне уже надоело объяснять.
Просто посмотри другие приложения и найди хотя бы одно такое (из профессиональных) где есть спинер в списке - я думаю ты вряд ли найдешь. А с таблицами и подавно - они крайне редко используются причем для довольно специфических целей.