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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Видео http://www.cyberforum.ru/android-dev/thread692605.html
Всем приветик, подскажите, пожалуйста, хорошие видео уроки по программировании на андроид:gsmile:
Программирование Android БД, защита, Play Market обновление БД Планирую написать программу, которая читает и выводит данные из довольно немаленькой локальной базы данных. База данных должна быть максимально защищена от копирования. Вопросы: 1. Насколько защищена БД SQLite от ее дампа в целях последующего использования? Как я понял любой пользователь с root правами может скачать ее файл и открыть? 2. Имеет ли смысл в целях сохранности базы, вместо SQLite... http://www.cyberforum.ru/android-dev/thread692563.html
Программирование Android Можно ли взломать apk чтобы кэш скачивался по вай-фай без проверки?
Можно ли взломать apk чтобы кэш скачивался по вай-фай без проверки?
Программирование Android не работает запрос
Доброго времени суток. Есть такой запрос: String table="SELECT recept FROM Dish WHERE recept LIKE ?"; String selectionArgs={search}; Cursor receptCursor = database.rawQuery(table, selectionArgs); Подскажите, как использовать "%" с оператором LIKE? Пробовал варианты вроде String table="SELECT recept FROM Dish WHERE recept LIKE '%"+search+"%' "; к сожалению, безрезультатно((
Программирование Android Цвет бэкграунда кнопки http://www.cyberforum.ru/android-dev/thread691990.html
Всем доброго времени суток! Вопрос в следующем: при нажатии на кнопку она "подсвечивается". Как сделать так, чтобы при нажатии на кнопку в первый раз она "подсвечивалась", а при нажатии на нее же второй раз "подсветка" снималась?
Программирование Android Выдаёт ошибку Error occurred during initialization of VM java/lang/NoClassDefFoundError: java/lang/ref/FinalReference помогите убрать ,а то уже не знаю что делать. подробнее

Показать сообщение отдельно
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586

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

09.11.2012, 23:31. Просмотров 1209. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru