Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
1

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

10.03.2014, 04:25. Просмотров 880. Ответов 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")?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2014, 04:25
Ответы с готовыми решениями:

Диалог с флажками
У меня диалог с флажками, первый элемент диалога это ВЫДЕЛИТЬ ВСЕ, при его...

Не работает диалог
Добрый день! Подскажите как быть. Имеется код создания диалогового окна...

ListView и Диалог
Привет. Редактирование TextView при помощи диалога. public class...

Как закрыть диалог
Я запускаю метод, чтобы залогиниться через FB. Всё происходит с помощью...

Как обработать диалог?
как сделать так чтобы после открытия диалога он не пропадал по нажатию пальцем...

4
angryrobot
Командир зеленых роботов
348 / 285 / 54
Регистрация: 08.10.2013
Сообщений: 565
10.03.2014, 10:21 2
Цитата Сообщение от Tester64 Посмотреть сообщение
можно ли от этого избавиться?
При таком подходе (перекидывая файлы в новый проект) - нельзя. Более правильный подход - сделать библиотеку
Цитата Сообщение от Tester64 Посмотреть сообщение
Можно ли искать кнопки(тект, лайауты) на активити не через findViewById(R.id.button1), а (например) через строковое имя("button1")?
Да, можно. Используйте метод findViewWithTag
0
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
10.03.2014, 18:08  [ТС] 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). Но как это проявляется в яве? Шустрее ли компиляция за счет заранее скомпилированой библиотеке? Или только более удобный перенос компонент между проектами со всеми ресурсами одной папкой? Я работаю в студии, поэтому Ваша ссылка не очень помогла... А по чужим примерам помню что слегка путает какую папку в проекте нужно подключать и компилировать...
0
angryrobot
Командир зеленых роботов
348 / 285 / 54
Регистрация: 08.10.2013
Сообщений: 565
10.03.2014, 20:12 4
Лучший ответ Сообщение было отмечено Tester64 как решение

Решение

Цитата Сообщение от 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 файл и подключать его к проектам. (как в "обычной джаве" )
1
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
10.03.2014, 23:29  [ТС] 5
Получилось! Правда пришлось передать в параметре еще и Id вехнего лейаут для обьявления диалога. Там тег не работал, т.к. первый вьюв еще не определен...
0
10.03.2014, 23:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2014, 23:29

Диалог выбора файла
Темы на форуме по данному вопросу видел, но не решают проблему:) Что...

Диалог выбора файла
обнаружил, что стандартного диалога не существует нашел такую реализацию...

Прозрачный диалог ожидания
Привет, как сделать эту крутяшку и текст снизу? В инете толи плохо искал, толи...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru