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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
#1

Обработка клика на виджете - Программирование Android

09.11.2012, 23:31. Просмотров 1205. Ответов 0
Метки нет (Все метки)

Есть серия виджетов. Каждый имеет свой идентификатор. По этому идентификатору сохраняются настройки и по ним же соотв. виджет обновляется. Поставил в qppwidget-provider инструкцию android:focusable="true" для обработки клика на виджете. В методе onUpdate делаю следующее:
Java
1
2
3
4
5
6
7
8
9
                public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
                ...
        RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
        Intent configIntent = new Intent(context, PreferencesActivity.class);
        configIntent.setAction(ACTION_WIDGET_CONFIGURE);
        configIntent.putExtra(ACTION_WIDGET_CONFIGURE, appWidgetId);
        PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
        updateViews.setOnClickPendingIntent(R.id.widget_imageview, configPendingIntent);
        appWidgetManager.updateAppWidget(appWidgetId, updateViews);
На экране несколько копий одного и того же виджета с разными настройками. Хочу по нажатию перейти к настройкам. Тапаю на виджет. Открывается активити настроек PreferencesActivity, но с данными по умолчанию.
Если в строке
Java
1
PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, PendingIntent.FLAG_UPDATE_CURRENT);
поставить FLAG_UPDATE_CURRENT, то открывается последнее сохраненное состояние этого активити не зависимо от кликнутого виджета.
В PreferencesActivity.java в методе onCreate написано следующее:
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
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setResult(RESULT_CANCELED);
        setContentView(R.layout.activity_preferences);
 
        Intent intent = getIntent();
        Bundle extras = intent.getExtras();
        if (extras != null) {
            mAppWidgetId = extras.getInt(
                    AppWidgetManager.EXTRA_APPWIDGET_ID,
                    AppWidgetManager.INVALID_APPWIDGET_ID);
            if (intent.getAction().equals(WidgetActivity.ACTION_WIDGET_CONFIGURE)) {
                mAppWidgetId = extras.getInt(
                        WidgetActivity.ACTION_WIDGET_CONFIGURE,
                        AppWidgetManager.INVALID_APPWIDGET_ID);
            }
        }
        if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
            finish();
        }
 
        String preffilename = PREFERENCES_FILE_NAME+"_"+String.valueOf(mAppWidgetId);
        try{
            mSettings = getSharedPreferences(preffilename, Context.MODE_PRIVATE);
            readPreferences();
        }
        catch(Exception e){Toast.makeText(PreferencesActivity.this, e.getMessage(), Toast.LENGTH_LONG).show(); return;}
    }
в методе readPreferences обычное считывание настроек. Но сюда почему то всегда приходит идешка самого первого виджета, а не тапнутого. Помогите разобраться...запарился уже.

Добавлено через 16 часов 18 минут
Никаких мыслей ни у кого нет? Уточню вопрос: как мне определить на каком виджете я тапнул? Как узнать ид тапнутого виджета.

Добавлено через 7 часов 31 минуту
Вот решение. Нужно разместить в том же месте где формируется Intent в файле java виджета
В общем это выглядит так:

Intent configIntent = new Intent(context, PreferencesActivity.class);
configIntent.setAction(ACTION_WIDGET_CONFIGURE);
Uri data = Uri.withAppendedPath(Uri.parse(URI_SCHEME + "://widget/id/"),String.valueOf(appWidgetId));
configIntent.setData(data);
PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, PendingIntent.FLAG_UPDATE_CURRENT);
updateViews.setOnClickPendingIntent(R.id.widget_imageview, configPendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, updateViews);

Жирным выделено то чего не хватало.

Добавлено через 2 минуты
URI_SCHEME: просто константа с чем угодно.

Это работает, но почему? Бог знает

Добавлено через 46 минут
Короче, кому нужен будет пример могу скинуть целиком. Все работает, проверил.

Результат взял отсюда: http://stackoverflow.com/questions/4...ng-last-widget
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.11.2012, 23:31     Обработка клика на виджете
Посмотрите здесь:

Текст в виджете - Программирование Android
Здравствуйте господа форумчане!)Подскажите пожалуйста новичку... Как добавить текст в TextView на виджете? Знаю, что добавить текст в...

Нарисовать график на виджете - Программирование Android
Сопсно стал вопрос как, пытался сделать дедовским способом, создал вью и нарисовал на нем, попытался вставить в main.xml ничего не вышло,...

Изменить размер шрифта в виджете - Программирование Android
Т.к. в AppWidgetProvider не используется findViewById используют класс RemoteView. RemoteViews rv= new...

Создать кнопку и действие на нее на виджете - Программирование Android
Как создать кнопку и действие на нее на виджете? Добавлено через 3 часа 22 минуты Никто не знает?:(

Как добавить поддержку прокрутки в собственном виджете? - Программирование Android
Здравстсвуйте! Проблема в следующем: создаю активити, в которой будет динамически рисоватья различная гграфика на канве в качестве...

Как в виджете отловить, что экран повернулся - Программирование Android
Во собственно и все. Какое событие нужно ловить? Спасибо.

Прозрачность Layout для клика - Программирование Android
Есть программа в ней на activity лежит несколько слоев . На слоях много кнопок и.т.д. и самый верхний слой без всего (без кнопок) то...

RecyclerView анимация клика по элементу - Программирование Android
Подскажите пожалуйста, как сделать в RecyclerView обработчик нажатий на элемент, чтобы элемент как то подсвечивался чтоли. Хоть что то чтоб...

Поменять картинку у button после клика (не у ImageButton) - Программирование Android
Приветствую. Есть кнопка <Button android:id="@+id/button1" android:layout_width="fill_parent" ...

Открытие приложенея после клика на нотификации (Service, notification) - Программирование Android
всем добрый день. Содал простое приложение. Одно Активити и одна служба. Служба старуте вместе с осью. задача службы просто...

Обработка клика по кнопке - C++ WinAPI
В msdn сказано например ,для BN_CLICKED BN_CLICKED notification code ... wParam ...

Обработка клика по кнопке - ActionScript
здравствуйте!помогите с проблемой...делаем с коллегой проект для конкурса-название "Загадки". нам нужно, чтобы при нажатии на...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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