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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
#1

R-независимый диалог - Android

10.03.2014, 04:25. Просмотров 737. Ответов 4
Метки нет (Все метки)

После Делфи привык делать "идеально отлаженые компоненты" и ими пользоваться во всех своих проектах.

Написал свой диалог Yes-No для выхода из программы. Загнал его в активити com.my.utils.activity_YesNo.java . Ресурсы положил в yes_no.xml.
Хочу просто перекидывать эти файлы в другой проект и их использовать, но приходится в каждом activity_YesNo.java проставлять свою инициализацию R класса:
import com.my1.R;
import com.my2.R;
import com.my3.R;
можно ли от этого избавиться?
Можно ли искать кнопки(тект, лайауты) на активити не через findViewById(R.id.button1), а (например) через строковое имя("button1")?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2014, 04:25     R-независимый диалог
Посмотрите здесь:

Android Клавиатура или всплывающий диалог
Android Как закрыть диалог
Android Диалог выбора файла
Android ListView и Диалог
Как обработать диалог? Android
Диалог выбора файла Android
Прозрачный диалог ожидания Android
Android Диалог с флажками
Android Диалог выбора файла в Android
Диалог указания координаты на карте Android
Диалог с вводом текста Android
Android Не работает диалог

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
10.03.2014, 10:21     R-независимый диалог #2
Цитата Сообщение от Tester64 Посмотреть сообщение
можно ли от этого избавиться?
При таком подходе (перекидывая файлы в новый проект) - нельзя. Более правильный подход - сделать библиотеку
Цитата Сообщение от Tester64 Посмотреть сообщение
Можно ли искать кнопки(тект, лайауты) на активити не через findViewById(R.id.button1), а (например) через строковое имя("button1")?
Да, можно. Используйте метод findViewWithTag
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
10.03.2014, 18:08  [ТС]     R-независимый диалог #3
Цитата Сообщение от angryrobot Посмотреть сообщение
Да, можно. Используйте метод findViewWithTag
Можете подкинуть простой пример применения findViewWithTag?
Нигде не нашел адекватных примеров кода... чего туда только не пытаются подставить в параметр. И вьюв и счетчик и position... А мне бы ТЕКСТОВОЕ название элемента.

Цитата Сообщение от angryrobot Посмотреть сообщение
Более правильный подход - сделать библиотеку
В моей (этой) ситуации врядли подойдет. У меня уже коллекция из 10-15 классов-утилит (работа со строками, замена Log.e, RND, Multitouch, UnError, Draw...).
Раньше сделал метод который вызывал стандартный диалог на основе AlertDialog. Решил доработать - добавить цветов, стильных цветных кнопок, полупрозрачность... получилась простая функция и простое её применение:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    @Override
    public void onBackPressed() {
        new activity_YesNo().Show(this, "Выход:\nВы уверены?",
                "Увы да!", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                },
                "Нет", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                },
                R.layout.dlg_yes_no_contrast
                //R.layout.dlg_yes_no_black
                //R.layout.dlg_yes_no_white
                //R.layout.dlg_yes_no_light
                //R.layout.dlg_yes_no_night
        );
    }
Причем R.layout.dlg_yes_no_contrast - это СМЕННЫЙ скин. На темном фоне лучше смотрится белый, а на белом черный... Но в каждом R.layout.dlg_yes_no_contrast есть минимум 3 компонента - 2 кнопки + текст (с одинаковыми названиями). И вместо простого обновления класса более свежим из соседнего проекта, должен еще и его править. Тяжело следить где "новее" версия - размер и дата прыгают. Можно конечно добавить в вызов функции еще 3 параметра: R.id.bt_ok, R.id.bt_cancel, R.id.bt_info (тогда можно избавиться от подключения R), но это как-то не правильно... А если шапку захочу добавить, а если таймер на автозакрытие захочу приделать...

И еще, если не сложно опишите преимущества библиотек в андроиде. Я знаю что это дает в Windows (DLL). Но как это проявляется в яве? Шустрее ли компиляция за счет заранее скомпилированой библиотеке? Или только более удобный перенос компонент между проектами со всеми ресурсами одной папкой? Я работаю в студии, поэтому Ваша ссылка не очень помогла... А по чужим примерам помню что слегка путает какую папку в проекте нужно подключать и компилировать...
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
10.03.2014, 20:12     R-независимый диалог #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Tester64 Посмотреть сообщение
Можете подкинуть простой пример применения findViewWithTag?
Вот layout в котором вообще нет никаких IDшников, только тэги:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:tag="MyButton"
        android:text="Button" />
 
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:tag="MyEditText"
        android:ems="10" >
    </EditText>
 
</LinearLayout>
А вот код который с ним работает:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        View v = getLayoutInflater().inflate(R.layout.activity_main, null);
        setContentView(v);
        Button btn = (Button) v.findViewWithTag("MyButton");
        final EditText txt = (EditText) v.findViewWithTag("MyEditText");
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                txt.setText("Hello world!");
            }
        });
    }
}
Цитата Сообщение от Tester64 Посмотреть сообщение
опишите преимущества библиотек в андроиде
Один и тот же код можно использовать в разных проектах.
Или только более удобный перенос компонент между проектами со всеми ресурсами одной папкой?
Да, именно так. Кстати если бы в библиотеке не было никаких ресурсов, а только java файлы с кодом, все было бы гораздо проще. Можно было бы сделать обычный jar файл и подключать его к проектам. (как в "обычной джаве" )
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
10.03.2014, 23:29  [ТС]     R-независимый диалог #5
Получилось! Правда пришлось передать в параметре еще и Id вехнего лейаут для обьявления диалога. Там тег не работал, т.к. первый вьюв еще не определен...
Yandex
Объявления
10.03.2014, 23:29     R-независимый диалог
Ответ Создать тему
Опции темы

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