Комментарии 27
Да сколько же можно карму дергать-то?
Разумнее было бы если при отказе грузить аватарку — виджет автоматом становился бы 1х1
Кстати. Есть идея сделать простенький виджетик, который бы показывал текущую цену на нефть и динамику стрелочкой. В нашей стране он бы пользовался успехом :)
А минусовая на черном фоне? =)
спасибо за статью. несколько уточнений хотелось бы внести:
— в описании виджета (xml файл с параметрами <appwidget-provider>) лучше установить android:updatePeriodMillis=«0», ибо в некоторых сборках есть значение по умолчанию, т.е. принудительное обновление раз в час, а с этим параметром автоматических обновлений не будет гарантировано:
— вы не упомянули о методе onReceive(...) в AppWidgetProvider, который обрабатывает события. в вашем случае он не нужен, но существует большая проблема в версии Android 1.5, там не вызывается автоматически метод onDeleted(...) (к примеру, на очень распространенном HTC Hero), что потенциально ведет к проблемам, в вашем случае желательно этот fix применить, чтобы таки чистить систему после своей деятельности:
— в методе onUpdate(...) вы в отдельном потоке обновляете все активные виджеты, этого делать не стоит. это системный вызов и он обновит данные сам в отдельном потоке:
т.е. просто уберите new Thread(...), все будет работать как надо;
— чтобы было понятнее, вот такая конструкция с перебором ID:
позволяет вызвать метод updateAppWidget для всех активных виджетов на экране, т.е. в массиве ids есть указатели на все активные виджеты и перебором вы отправляете всем им нужную команду.
— в описании виджета (xml файл с параметрами <appwidget-provider>) лучше установить android:updatePeriodMillis=«0», ибо в некоторых сборках есть значение по умолчанию, т.е. принудительное обновление раз в час, а с этим параметром автоматических обновлений не будет гарантировано:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" ... android:updatePeriodMillis="0" ...> </appwidget-provider>
— вы не упомянули о методе onReceive(...) в AppWidgetProvider, который обрабатывает события. в вашем случае он не нужен, но существует большая проблема в версии Android 1.5, там не вызывается автоматически метод onDeleted(...) (к примеру, на очень распространенном HTC Hero), что потенциально ведет к проблемам, в вашем случае желательно этот fix применить, чтобы таки чистить систему после своей деятельности:
@Override public void onReceive(Context context, Intent intent) { // v1.5 fix that doesn't call onDelete Action final String action = intent.getAction(); Log.w("onReceive() action", action); if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) { final int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) { this.onDeleted(context, new int[]{appWidgetId}); } } else { try { super.onReceive(context, intent); } catch (IndexOutOfBoundsException ex) { Log.e("onReceive", ex.getMessage()); ex.printStackTrace(); } }
— в методе onUpdate(...) вы в отдельном потоке обновляете все активные виджеты, этого делать не стоит. это системный вызов и он обновит данные сам в отдельном потоке:
@Override public void onUpdate(Context ctxt, AppWidgetManager mgr, int[] appWidgetIds) { ... new Thread(new Runnable(){ @Override public void run() { // TODO Auto-generated method stub for (int i = 0; i < ids.length; i++) { appWidgetManager.updateAppWidget(ids[i], buildUpdate(context, ids[i])); } } }).start(); super.onUpdate(ctxt, mgr, appWidgetIds); ....
т.е. просто уберите new Thread(...), все будет работать как надо;
— чтобы было понятнее, вот такая конструкция с перебором ID:
@Override public void onUpdate(Context ctxt, AppWidgetManager mgr, int[] appWidgetIds) { final Context context = ctxt; final AppWidgetManager appWidgetManager = mgr; final int[] ids = appWidgetIds; .... for (int i = 0; i < ids.length; i++) { appWidgetManager.updateAppWidget(ids[i], buildUpdate(context, ids[i])); } ....
позволяет вызвать метод updateAppWidget для всех активных виджетов на экране, т.е. в массиве ids есть указатели на все активные виджеты и перебором вы отправляете всем им нужную команду.
За статью спасибо, как раз начал с андройдом разбираться.
Но вот виджет бесполезный совсем)
И подсветки синтаксиса не хватает.
Но вот виджет бесполезный совсем)
И подсветки синтаксиса не хватает.
Ну не погодный же виджет делать, в конце-то концов :) Автор молодец :) Я сейчас в процессе написания некоторого приложения для Android, с виджетами только планировал разбираться. А тут такой удачный топик плюс грамотный комментарий.
Блин, а мне как раз погодный надо сделать :-D С текущей реальной температурой на улице. Для оперы сделал, для винды сделал, осталось вот с андроидом разобраться.
Кармадрочерство выходит на новый уровень! :)
В последнее время все больше постов про Android. Очень рад данному факту.
Ну и зачем она вам нужна???
Зависимость от цифр?
Вас при помощи этих цифр заставляют писать сюда. Наполнять контент. Забирают ваше драгоценное время, хотя вы сами добровольно отдаёте его.
Зависимость от цифр?
Вас при помощи этих цифр заставляют писать сюда. Наполнять контент. Забирают ваше драгоценное время, хотя вы сами добровольно отдаёте его.
Мне будет стыдно на свою карму смотреть)
Приятно, что теперь все чаще люди пишут статьи по программированию :)
Ы! Я на скриншоте. :)
Господи, как же это прекрасно! Теперь дрочить на карму можно будет даже в общественном транспорте!
1. Статья хорошая, и замечания по поводу кода чрезвычайно ценны.
2. Все таки не хватает расцветки синтаксиса, было бы проще читать
3. В методе usersCreate необходимость использования StringBuilder для меня не очевидна. Да, выполнятся быстрее, да, меньше расходы на создание новых объектов, да, методологически более верный метод. Но этот код выполняется только один раз, так что выигрыш получается не очень большой, а читать сложнее. Я бы просто использовал оператор конкатенации для получения текста SQL запроса
2. Все таки не хватает расцветки синтаксиса, было бы проще читать
3. В методе usersCreate необходимость использования StringBuilder для меня не очевидна. Да, выполнятся быстрее, да, меньше расходы на создание новых объектов, да, методологически более верный метод. Но этот код выполняется только один раз, так что выигрыш получается не очень большой, а читать сложнее. Я бы просто использовал оператор конкатенации для получения текста SQL запроса
хм, кто взял мой аватар и перевернул его?.. ;)
Большое спасибо за подробное описание. Делая свой виджет столкнулся с проблемой, а благодаря вашему посту решил ее =)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Пишем виджет ХабраКарма ex-CarmaWidget для Android