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

Одинаковые названия id для 2х кнопок - Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Twi7ter
 Аватар для Twi7ter
3 / 3 / 1
Регистрация: 27.03.2013
Сообщений: 147
26.10.2014, 21:37     Одинаковые названия id для 2х кнопок #1
Пишу приложение и там есть 2 xml файла,что то типа диалога,там я ввожу данные элемента которого хочу добавить в БД,так вот у меня на каждом из этих 2 xml файлов есть по кнопке Ok и Cancel, назвал id я на каждой кнопке btnOK и btnCancel,подскажите,пожалуйста,можно ли как то прописать чтоб я обращался к id конкретного xml файла,а то если через R.id обращаться ,то он 1е попавшееся значение берет ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dubok79
 Аватар для dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
27.10.2014, 16:49     Одинаковые названия id для 2х кнопок #2
Все возьмется как надо не переживайте.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
27.10.2014, 18:52     Одинаковые названия id для 2х кнопок #3
А зачем вообще делать одинаковые id?
dubok79
 Аватар для dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
27.10.2014, 18:55     Одинаковые названия id для 2х кнопок #4
А почему бы и нет? У меня 3 xml по сути одинаковые. В самом коде мы цепляем нужный layout, а остальное остается неизменным.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
27.10.2014, 18:58     Одинаковые названия id для 2х кнопок #5
Ок тогда зачем три одинаковых xml?
dubok79
 Аватар для dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
27.10.2014, 19:02     Одинаковые названия id для 2х кнопок #6
Не одинаковых, а по сути одинаковых. Кое что все-таки у них разное. Например для виджетов. Некоторые параметры RemoteView не дает менять программно.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
27.10.2014, 19:09     Одинаковые названия id для 2х кнопок #7
Ну если так - да, имеет смысл. А для всего остального есть мастеркард фрагменты)
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
28.10.2014, 05:23     Одинаковые названия id для 2х кнопок #8
Два года уже "кодю", а полезности фрагментов пока не понял... Наоборот пишу "костыли" лишь бы от них избавиться там где считается что без них нельзя (ViewPager)...

Когда Вы подключаете в свое активити XML он становится "главным". Id-ы ищутся ТОЛЬКО в нем. Внутри одного активити Id должны быть уникальными. Но если есть 2 активити с разными XML то они "пересекаться" не будут!
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
28.10.2014, 08:04     Одинаковые названия id для 2х кнопок #9
Тоже избегал их долго. Но всетаки с ними кода намного меньше. 1 раз нарисовал xml, сделал абстрактный фрагмент, описал в нем весь общий код - и все хоть миллион вариаций этого фрагмента в пару строк кода каждая. Это как свой виджет только удобнее)
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
28.10.2014, 10:55     Одинаковые названия id для 2х кнопок #10
Tester64, я взял чужой проект, было не выбирать - пришлось работать с фрагментами. Обратно на работу с активностями пока не тянет в том смысле, что активности, по сути, это совершенно разные формы, а фрагменты удобны для единообразия. Например, есть MainActivity со своими шапкой и подвалом, едиными для всего приложения. Средняя часть может меняться. Удобнее сделать это фрагментами, чем прописывать такое поведение в каждой активности. Кроме того, навигация по активностям может несколько отличаться (наверное) от таковой по фрагментам. С фрагментами можно, например, добавить их несколько в стек, потом часть выбросить.
Но есть и минусы. Требуется внимательность. У фрагментов свой жизненный цикл, не всегда пересекающийся с жизненным циклом активностей. Кроме того, при длительных переходах с одного фрагмента на другой активность может быть уничтожена, что может привести к крэшу приложения, если не знать, как это обойти.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
28.10.2014, 16:47     Одинаковые названия id для 2х кнопок #11
Цитата Сообщение от CoolMind Посмотреть сообщение
Обратно на работу с активностями пока не тянет в том смысле, что активности, по сути, это совершенно разные формы, а фрагменты удобны для единообразия. Например, есть MainActivity со своими шапкой и подвалом, едиными для всего приложения. Средняя часть может меняться. Удобнее сделать это фрагментами, чем прописывать такое поведение в каждой активности. Кроме того, навигация по активностям может несколько отличаться (наверное) от таковой по фрагментам. С фрагментами можно, например, добавить их несколько в стек, потом часть выбросить.
Я это все пока пишу через includ'ы в xml.
Они "заворачиваются" в лейауты и управляют их видмостью. Подмена инклюда в проекте меняет кусок во всех активити. Например блок цветных кнопок Да-Нет внизу каждого диалога. Так-же инклюдами делают ВСЕ фиксированные закладки в одном активити. Без динамического создания. Когда даже очень сложная активити не превышает 500 строк это удобнее чем разрезать ее на 5-6 фрагментов и каждый оформлять своими файлами и кодом. И потом еще устраивать обмен сообщений между фрагментами вместо наглого обращения к компонентам по ID из любого места кода в любую закладку (даже не видимую сейчас).

Сейчас пишу свой компонент - составной блок из списка, графического (рисованого) скролла и цветных кнопок управления списком под ним (с командой спрятать/показать). По идее будет "унифицирован" и воткнут в большинство моих проектов - проще подключение к коду, заготовки для работы со справочниками и т.д... Подумываю обернуть это в фрагменты... Но если сейчас это перепишу, боюсь усложнить общение с основной программой. Сейчас его интеграция в проект включает инклюд в активити
XML
1
2
3
4
5
6
7
8
9
10
11
    <LinearLayout
        android:id="@+id/ll_list_2"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="0.9"
        >
 
        <include layout="@layout/inc_ref_list_def_full" />
 
    </LinearLayout>
И клас-обвертка для работы с ним. Натравливаю класс прямо на R.id.ll_list_2. Остальные компоненты он находит сам через строковые теги (2 раза могу в одном активити использовать без риска продублировать ID).
Напрямую прописываю реакторы через интерфейсы и отсылаю команды в него методами. Через функцию могу получить (например) размер списка или видимость кнопок. Или задать размеры и цвета рисованного скролла.
Неужели подобного можно добиться фрагментами?
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
28.10.2014, 17:34     Одинаковые названия id для 2х кнопок #12
Tester64, я незнаком с инклюдами, но примерно понял. Подскажите, пожалуйста, как вы делаете следующую вещь: у вас на экране есть три вкладки (например, прогноз погоды на сегодня, завтра и на неделю или что угодно), вы перемещаетесь между ними (с первой на вторую вкладку, затем на третью). Нажимаете кнопку "назад" и возвращаетесь не с третьей вкладки во вторую, а сразу на стартовый экран.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
28.10.2014, 19:29     Одинаковые названия id для 2х кнопок #13
Цитата Сообщение от CoolMind Посмотреть сообщение
Подскажите, пожалуйста, как вы делаете следующую вещь: у вас на экране есть три вкладки (например, прогноз погоды на сегодня, завтра и на неделю или что угодно), вы перемещаетесь между ними (с первой на вторую вкладку, затем на третью). Нажимаете кнопку "назад" и возвращаетесь не с третьей вкладки во вторую, а сразу на стартовый экран.
Или я не понял вопроса или Вы термины путаете...
ЗАкладки не равны Активити! А "Вкладки"? Закладки - это как "заложеные страницы в книжке". Микрокнопки переключатели в верху страницы. При нажатии на закладку на шапке тело активити меняется.
А активити... из одной можно переходить в другую лишь вызвав ее. Как переоткрыть программу в винде или положить ее снизу наверх.

"Назад" обычно закрывает текущую активити. Но ее можно перехватить назначив свой обработчик. Там можно либо вызывать заново первое окно либо закрыть текущее назначив некий глобальный маркер прошлой что-бы тоже закрылав как только ей передадут фокус.. (сам такого пока не делал)
dubok79
 Аватар для dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
28.10.2014, 19:39     Одинаковые названия id для 2х кнопок #14
Цитата Сообщение от Tester64 Посмотреть сообщение
Подмена инклюда в проекте меняет кусок во всех активити.
А можете и это прокомментировать? Подмена где и как. Спасибо
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
28.10.2014, 20:10     Одинаковые названия id для 2х кнопок #15
Цитата Сообщение от dubok79 Посмотреть сообщение
А можете и это прокомментировать? Подмена где и как.
Инклюды помогают создавать СОСТАВНЫЕ XML файлы. Делить длинный файл на блоки. Например у меня была активити с 3мя закладками. В каждой закладке было от 10 элементов (кнопки, редакторы, галочки). Редактировать все это в одном файле - тяжело! Предварительный просмотр хватает только первую закладку. Опять-же можно делать "заготовки" элементов. Например едитор с кнопкой. Или заготовку для кнопок да-нет внизу активити. Тогда подправив лишь в одном месте заготовку она исправится во всех активити. Так-же можно для двух разных проектов просто перекидывать заготовки между проектами. Например стильные надписи...
dubok79
 Аватар для dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
28.10.2014, 20:12     Одинаковые названия id для 2х кнопок #16
Все это хорошо, но мне кажется как то это кривовато или нет? Я сам порой так делаю, но всегда мучат сомнения. А за наводку на include действительно спасибо. Сразу вздохнул свободнее. Как я прошел мимо этого тэга.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
28.10.2014, 23:22     Одинаковые названия id для 2х кнопок #17
Цитата Сообщение от dubok79 Посмотреть сообщение
Все это хорошо, но мне кажется как то это кривовато или нет? Я сам порой так делаю, но всегда мучат сомнения. А за наводку на include действительно спасибо. Сразу вздохнул свободнее. Как я прошел мимо этого тэга.
Пока все работает... Тег тоже в учебниках не встречал - обнаружил случайно в чужих исходниках. И действительно "задышалось легче" - мегасложные активити с сотней тегов смог разбить на логические не большие блоки.
И пока не встретил РЕАЛЬНОЙ необходимости плодить фреймы. Сейчас успешно избавился от них в android.support.v4.view.ViewPager. Хотя во всех учебниках примеры исключительно через фреймы. У меня получился лишь один внешний обработчик (на интерфейсах) который заполняет тело закладки. И потом я пользуюсь любым элементом любой закладки. И в закладках убрал их пересоздание - ОЧЕНЬ шустро получилось. И 30-50 элементов вполне логично смог разместить в одном активити. Включая список с настройками. А основной код (административный) оказался меньше 500 строк. Каждый элемент контролируется классами, а в основном вся управляющая логика, которую легко менять...
Rube
910 / 558 / 87
Регистрация: 13.02.2014
Сообщений: 2,068
29.10.2014, 08:32     Одинаковые названия id для 2х кнопок #18
Цитата Сообщение от Tester64 Посмотреть сообщение
Сейчас успешно избавился от них в android.support.v4.view.ViewPager.
Хм, интересно, а можно простенький пример?
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
29.10.2014, 15:11     Одинаковые названия id для 2х кнопок #19
Цитата Сообщение от Tester64 Посмотреть сообщение
Например у меня была активити с 3мя закладками. В каждой закладке было от 10 элементов (кнопки, редакторы, галочки). Редактировать все это в одном файле - тяжело! Предварительный просмотр хватает только первую закладку.
Вот здесь как раз уместны фрагменты.
Цитата Сообщение от Tester64 Посмотреть сообщение
"Назад" обычно закрывает текущую активити. Но ее можно перехватить назначив свой обработчик. Там можно либо вызывать заново первое окно либо закрыть текущее назначив некий глобальный маркер прошлой что-бы тоже закрылав как только ей передадут фокус.. (сам такого пока не делал)
Во фрагментах это происходит подобным образом, но зато там легко можно сбросить произвольное количество фрагментов со стека и вернуться к нужному фрагменту, а после, например, и вовсе закрыть программу. Я пока не знаю, что происходило бы, если бы потребовалось закрыть 3 активности подряд одной кнопкой. Или они не кладутся в стек?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2014, 20:49     Одинаковые названия id для 2х кнопок
Еще ссылки по теме:

Android Как вместо названия Activity подставить элемент ListView?
Android Как поменять названия кнопок местами в Java?
Android Один обработчик для динамических кнопок
Код для двух кнопок в одном активити Android
Не работает onClickListener для одной из девяти кнопок Android

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

Или воспользуйтесь поиском по форуму:
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
29.10.2014, 20:49     Одинаковые названия id для 2х кнопок #20
Цитата Сообщение от Rube Посмотреть сообщение
Хм, интересно, а можно простенький пример?
Тяжело... Я сам не до конца понял как это получилось. Вынес ВСЮ математику в отдельный класс-хранилище. В этом-же классе хранится управление шапкой закладок как отдельным компонентом. Связь между элементам шапки и тела через строковые теги. Подключение ВСЕЙ конструкции в активити выглядит так:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        tabs_def = new uni_Tabs_new();
        tabs_def.InitHead(this, (LinearLayout)findViewById(R.id.ll_tabs_1),
                R.id.ll_Tab_1, R.layout.tab_header, R.id.ll_tab_main, R.id.tv_tab_text1, R.id.iv_tab_image1);
        tabs_def.setHead("tag0", "&nbsp<br><FONT COLOR='#66FF66'>Списки</FONT><br>&nbsp", 0, R.drawable.selector_tab_gray_black_green, null);
        tabs_def.setHead("tag1", "&nbsp<br><FONT COLOR='#FFFF66'>Отчеты</FONT><br>", 0, R.drawable.selector_tab_gray_black_yellow, null);
        tabs_def.setHead("tag2", "&nbsp<br><FONT COLOR='#FF6666'>Настройки</FONT><br>&nbsp", 0, R.drawable.selector_tab_gray_black_red, null);
        tabs_def.InitBody(this, (LinearLayout)findViewById(R.id.ll_tabs_1));
 
        uni_Tabs_new.OnFrameCreate onFrameCreate = new uni_Tabs_new.OnFrameCreate() { @Override public void onFrameCreate(View view, int position, String tag) {
            if (position == 0) {
// инициализация и заполнение элеметов ТЕКУЩЕЙ закладки...
// например обновление списков, заполнение надписей, отрисовывание графики
            } else if (position == 1) {
            } else if (position == 2) {
            }
        }};
        tabs_def.setBody("tag0", R.layout.inc_main_frame_1, onFrameCreate);
        tabs_def.setBody("tag1", R.layout.inc_main_frame_2, onFrameCreate);
        tabs_def.setBody("tag2", R.layout.inc_main_frame_3, onFrameCreate);
        tabs_def.selectById(0);

Отдельно выбираю (командой) вид анимации страниц из моей-же коллекции анимаций (в этом-же классе "управление закладками" - uni_Tabs_new).
Может поможет адаптер:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    private class AwesomePagerAdapter extends PagerAdapter {
 
        @Override public int getCount() {
            return getBodyCount();
            //return pBodyCount;
        } // количество закладок
 
        @Override
        public Object instantiateItem(ViewGroup collection, int position) {
            LayoutInflater layoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            body_class body = List_body.get(position);
            if (body == null) {
                return null;
            }
            View view = layoutInflater.inflate(body.ll_id, null);
            collection.addView(view,0);
            if (body.onCreate != null) body.onCreate.onFrameCreate(view, position, body.tag_name); // сразу после создания
            return view;
 
        }
 
        @Override
        public void destroyItem(ViewGroup collection, int position, Object view) {
            Rep.r("destroyItem["+position+"]", 3);
            body_class body = List_body.get(position);
            if (body == null) {
                return;
            }
            if (body.onDestroy != null) body.onDestroy.onFrameCreate((View) view, position, body.tag_name);
            collection.removeView((View) view);
        }
 
        @Override public boolean isViewFromObject(View view, Object object) { return (view==object); }
        @Override public void finishUpdate(ViewGroup arg0) {}
        @Override public void restoreState(Parcelable arg0, ClassLoader arg1) {}
        @Override public Parcelable saveState() { return null; }
        @Override public void startUpdate(ViewGroup arg0) {}
    }


Добавлено через 4 минуты
Цитата Сообщение от CoolMind Посмотреть сообщение
>> Например у меня была активити с 3мя закладками. В каждой закладке было от 10 элементов (кнопки, редакторы, галочки). Редактировать все это в одном файле - тяжело! Предварительный просмотр хватает только первую закладку.
Вот здесь как раз уместны фрагменты.
Считаете? Допустим у Вас на активити 30 кнопок. Они не вмещаются в экран. Приходится встраивать в скролл и долго листать вниз. Или...
Сделать несколько закладок и раскидать кнопки по группам. Юзабилити повышается. Процедуры обработок кнопок не надо переписывать. Все в одном-же классе (общедоступные данные).
Yandex
Объявления
29.10.2014, 20:49     Одинаковые названия id для 2х кнопок
Ответ Создать тему
Опции темы

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