Pull to refresh

Comments 27

Да сколько же можно карму дергать-то?
Пока не достигнешь экстаза =))) и не забрызгаешь окружающихподелишься с окружающими своей кармой
Разумнее было бы если при отказе грузить аватарку — виджет автоматом становился бы 1х1
Кстати. Есть идея сделать простенький виджетик, который бы показывал текущую цену на нефть и динамику стрелочкой. В нашей стране он бы пользовался успехом :)
Тогда уж лучше любой числовой показатель, которые можно извлечь с любой веб страницы.
А минусовая на черном фоне? =)
спасибо за статью. несколько уточнений хотелось бы внести:
— в описании виджета (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 есть указатели на все активные виджеты и перебором вы отправляете всем им нужную команду.
Спасибо за комментарий, на досуге обязательно поправлю.

А по поводу обновлялки, вывел ее в тред, т.к. в примерах у гугла IntentSerivce используется, и вроде бы написано что провайдер в уи треде живет. В любом случае, надо будет попробовать.
За статью спасибо, как раз начал с андройдом разбираться.
Но вот виджет бесполезный совсем)
И подсветки синтаксиса не хватает.
Ну не погодный же виджет делать, в конце-то концов :) Автор молодец :) Я сейчас в процессе написания некоторого приложения для Android, с виджетами только планировал разбираться. А тут такой удачный топик плюс грамотный комментарий.
Кармадрочерство выходит на новый уровень! :)
дрочи с нами, дрочи как мы, дрочи лучше нас!!! )
В последнее время все больше постов про Android. Очень рад данному факту.
Ну и зачем она вам нужна???

Зависимость от цифр?

Вас при помощи этих цифр заставляют писать сюда. Наполнять контент. Забирают ваше драгоценное время, хотя вы сами добровольно отдаёте его.
Мне будет стыдно на свою карму смотреть)
Приятно, что теперь все чаще люди пишут статьи по программированию :)
Хочу предостеречь по поводу метода BitmapFactory.decodeStream(inputStream). У него есть бага при закачке некоторых картинок (напоролся, когда работал с Flickr).

Лучше использовать BitmapFactory.decodeByteArray(data, 0, data.length), где data это массив байтов, полученный из inputStream'a.
Сталкивался, но на герое с 1.5 все заработало, поэтому я так и оставил, но спасибо.
Господи, как же это прекрасно! Теперь дрочить на карму можно будет даже в общественном транспорте!
1. Статья хорошая, и замечания по поводу кода чрезвычайно ценны.

2. Все таки не хватает расцветки синтаксиса, было бы проще читать

3. В методе usersCreate необходимость использования StringBuilder для меня не очевидна. Да, выполнятся быстрее, да, меньше расходы на создание новых объектов, да, методологически более верный метод. Но этот код выполняется только один раз, так что выигрыш получается не очень большой, а читать сложнее. Я бы просто использовал оператор конкатенации для получения текста SQL запроса
хм, кто взял мой аватар и перевернул его?.. ;)
Не прокатит, я сам его рисовал в гимпе довольно давно :)
Большое спасибо за подробное описание. Делая свой виджет столкнулся с проблемой, а благодаря вашему посту решил ее =)
Only those users with full accounts are able to leave comments. Log in, please.