Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/30: Рейтинг темы: голосов - 30, средняя оценка - 4.73
3 / 3 / 2
Регистрация: 27.03.2013
Сообщений: 147
1

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

26.10.2014, 21:37. Показов 5710. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу приложение и там есть 2 xml файла,что то типа диалога,там я ввожу данные элемента которого хочу добавить в БД,так вот у меня на каждом из этих 2 xml файлов есть по кнопке Ok и Cancel, назвал id я на каждой кнопке btnOK и btnCancel,подскажите,пожалуйста,можно ли как то прописать чтоб я обращался к id конкретного xml файла,а то если через R.id обращаться ,то он 1е попавшееся значение берет ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.10.2014, 21:37
Ответы с готовыми решениями:

Почти одинаковые названия
Я нахожусь в папке А1. У нее есть несколько дочерних папок. Например, Б1, Б2, Б3. В каждой из них...

TMainmenu названия кнопок
Господа Написал программу с компонентом TMainmenu хочу сделать ее на разных языках, то есть мне...

Одинаковые package и названия классов
Здравствуйте ув. пользователи данного форума, у меня следующая проблема. Существует класс MyClass...

Одинаковые названия функций QT и Socket
Добрый день. Вопрос заключается в том, что мне нужно написать программу работающую с помощью...

24
325 / 123 / 10
Регистрация: 01.11.2012
Сообщений: 586
27.10.2014, 16:49 2
Все возьмется как надо не переживайте.
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
27.10.2014, 18:52 3
А зачем вообще делать одинаковые id?
0
325 / 123 / 10
Регистрация: 01.11.2012
Сообщений: 586
27.10.2014, 18:55 4
А почему бы и нет? У меня 3 xml по сути одинаковые. В самом коде мы цепляем нужный layout, а остальное остается неизменным.
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
27.10.2014, 18:58 5
Ок тогда зачем три одинаковых xml?
0
325 / 123 / 10
Регистрация: 01.11.2012
Сообщений: 586
27.10.2014, 19:02 6
Не одинаковых, а по сути одинаковых. Кое что все-таки у них разное. Например для виджетов. Некоторые параметры RemoteView не дает менять программно.
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
27.10.2014, 19:09 7
Ну если так - да, имеет смысл. А для всего остального есть мастеркард фрагменты)
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
28.10.2014, 05:23 8
Два года уже "кодю", а полезности фрагментов пока не понял... Наоборот пишу "костыли" лишь бы от них избавиться там где считается что без них нельзя (ViewPager)...

Когда Вы подключаете в свое активити XML он становится "главным". Id-ы ищутся ТОЛЬКО в нем. Внутри одного активити Id должны быть уникальными. Но если есть 2 активити с разными XML то они "пересекаться" не будут!
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
28.10.2014, 08:04 9
Тоже избегал их долго. Но всетаки с ними кода намного меньше. 1 раз нарисовал xml, сделал абстрактный фрагмент, описал в нем весь общий код - и все хоть миллион вариаций этого фрагмента в пару строк кода каждая. Это как свой виджет только удобнее)
2
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
28.10.2014, 10:55 10
Tester64, я взял чужой проект, было не выбирать - пришлось работать с фрагментами. Обратно на работу с активностями пока не тянет в том смысле, что активности, по сути, это совершенно разные формы, а фрагменты удобны для единообразия. Например, есть MainActivity со своими шапкой и подвалом, едиными для всего приложения. Средняя часть может меняться. Удобнее сделать это фрагментами, чем прописывать такое поведение в каждой активности. Кроме того, навигация по активностям может несколько отличаться (наверное) от таковой по фрагментам. С фрагментами можно, например, добавить их несколько в стек, потом часть выбросить.
Но есть и минусы. Требуется внимательность. У фрагментов свой жизненный цикл, не всегда пересекающийся с жизненным циклом активностей. Кроме того, при длительных переходах с одного фрагмента на другой активность может быть уничтожена, что может привести к крэшу приложения, если не знать, как это обойти.
1
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
28.10.2014, 16:47 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).
Напрямую прописываю реакторы через интерфейсы и отсылаю команды в него методами. Через функцию могу получить (например) размер списка или видимость кнопок. Или задать размеры и цвета рисованного скролла.
Неужели подобного можно добиться фрагментами?
2
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
28.10.2014, 17:34 12
Tester64, я незнаком с инклюдами, но примерно понял. Подскажите, пожалуйста, как вы делаете следующую вещь: у вас на экране есть три вкладки (например, прогноз погоды на сегодня, завтра и на неделю или что угодно), вы перемещаетесь между ними (с первой на вторую вкладку, затем на третью). Нажимаете кнопку "назад" и возвращаетесь не с третьей вкладки во вторую, а сразу на стартовый экран.
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
28.10.2014, 19:29 13
Цитата Сообщение от CoolMind Посмотреть сообщение
Подскажите, пожалуйста, как вы делаете следующую вещь: у вас на экране есть три вкладки (например, прогноз погоды на сегодня, завтра и на неделю или что угодно), вы перемещаетесь между ними (с первой на вторую вкладку, затем на третью). Нажимаете кнопку "назад" и возвращаетесь не с третьей вкладки во вторую, а сразу на стартовый экран.
Или я не понял вопроса или Вы термины путаете...
ЗАкладки не равны Активити! А "Вкладки"? Закладки - это как "заложеные страницы в книжке". Микрокнопки переключатели в верху страницы. При нажатии на закладку на шапке тело активити меняется.
А активити... из одной можно переходить в другую лишь вызвав ее. Как переоткрыть программу в винде или положить ее снизу наверх.

"Назад" обычно закрывает текущую активити. Но ее можно перехватить назначив свой обработчик. Там можно либо вызывать заново первое окно либо закрыть текущее назначив некий глобальный маркер прошлой что-бы тоже закрылав как только ей передадут фокус.. (сам такого пока не делал)
0
325 / 123 / 10
Регистрация: 01.11.2012
Сообщений: 586
28.10.2014, 19:39 14
Цитата Сообщение от Tester64 Посмотреть сообщение
Подмена инклюда в проекте меняет кусок во всех активити.
А можете и это прокомментировать? Подмена где и как. Спасибо
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
28.10.2014, 20:10 15
Цитата Сообщение от dubok79 Посмотреть сообщение
А можете и это прокомментировать? Подмена где и как.
Инклюды помогают создавать СОСТАВНЫЕ XML файлы. Делить длинный файл на блоки. Например у меня была активити с 3мя закладками. В каждой закладке было от 10 элементов (кнопки, редакторы, галочки). Редактировать все это в одном файле - тяжело! Предварительный просмотр хватает только первую закладку. Опять-же можно делать "заготовки" элементов. Например едитор с кнопкой. Или заготовку для кнопок да-нет внизу активити. Тогда подправив лишь в одном месте заготовку она исправится во всех активити. Так-же можно для двух разных проектов просто перекидывать заготовки между проектами. Например стильные надписи...
0
325 / 123 / 10
Регистрация: 01.11.2012
Сообщений: 586
28.10.2014, 20:12 16
Все это хорошо, но мне кажется как то это кривовато или нет? Я сам порой так делаю, но всегда мучат сомнения. А за наводку на include действительно спасибо. Сразу вздохнул свободнее. Как я прошел мимо этого тэга.
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
28.10.2014, 23:22 17
Цитата Сообщение от dubok79 Посмотреть сообщение
Все это хорошо, но мне кажется как то это кривовато или нет? Я сам порой так делаю, но всегда мучат сомнения. А за наводку на include действительно спасибо. Сразу вздохнул свободнее. Как я прошел мимо этого тэга.
Пока все работает... Тег тоже в учебниках не встречал - обнаружил случайно в чужих исходниках. И действительно "задышалось легче" - мегасложные активити с сотней тегов смог разбить на логические не большие блоки.
И пока не встретил РЕАЛЬНОЙ необходимости плодить фреймы. Сейчас успешно избавился от них в android.support.v4.view.ViewPager. Хотя во всех учебниках примеры исключительно через фреймы. У меня получился лишь один внешний обработчик (на интерфейсах) который заполняет тело закладки. И потом я пользуюсь любым элементом любой закладки. И в закладках убрал их пересоздание - ОЧЕНЬ шустро получилось. И 30-50 элементов вполне логично смог разместить в одном активити. Включая список с настройками. А основной код (административный) оказался меньше 500 строк. Каждый элемент контролируется классами, а в основном вся управляющая логика, которую легко менять...
0
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
29.10.2014, 08:32 18
Цитата Сообщение от Tester64 Посмотреть сообщение
Сейчас успешно избавился от них в android.support.v4.view.ViewPager.
Хм, интересно, а можно простенький пример?
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
29.10.2014, 15:11 19
Цитата Сообщение от Tester64 Посмотреть сообщение
Например у меня была активити с 3мя закладками. В каждой закладке было от 10 элементов (кнопки, редакторы, галочки). Редактировать все это в одном файле - тяжело! Предварительный просмотр хватает только первую закладку.
Вот здесь как раз уместны фрагменты.
Цитата Сообщение от Tester64 Посмотреть сообщение
"Назад" обычно закрывает текущую активити. Но ее можно перехватить назначив свой обработчик. Там можно либо вызывать заново первое окно либо закрыть текущее назначив некий глобальный маркер прошлой что-бы тоже закрылав как только ей передадут фокус.. (сам такого пока не делал)
Во фрагментах это происходит подобным образом, но зато там легко можно сбросить произвольное количество фрагментов со стека и вернуться к нужному фрагменту, а после, например, и вовсе закрыть программу. Я пока не знаю, что происходило бы, если бы потребовалось закрыть 3 активности подряд одной кнопкой. Или они не кладутся в стек?
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
29.10.2014, 20:49 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 кнопок. Они не вмещаются в экран. Приходится встраивать в скролл и долго листать вниз. Или...
Сделать несколько закладок и раскидать кнопки по группам. Юзабилити повышается. Процедуры обработок кнопок не надо переписывать. Все в одном-же классе (общедоступные данные).
1
29.10.2014, 20:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.10.2014, 20:49
Помогаю со студенческими работами здесь

Смена названия кнопок в MsgBox
Здравствуйте! Возможно ли в msgbox задать свои названия кнопок, т.е. вместо &quot;Да&quot; &quot;Нет&quot;, было &quot;До&quot;...

Переменные названия кнопок в форме
Добрый день. Подскажите, пожалуйста, программисты гуманитарию, занимающемуся не своим делом)...

Изменить названия кнопок в MessageDlg
if MessageDlg('Вы действительно хотите удалить выбранный ингредиент?',mtWarning, mbOKCancel, 0) =...

Русские названия кнопок в Messagebox
Нужно выводить MessageBox с русскими кнопками &quot;Да&quot; &quot;Нет&quot; (Вместо &quot;Yes&quot; &quot;No&quot;). Возможно ли...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru