Удаленные представления Android-приложений не обновляются

Удаленный просмотр списка не обновляется (я имею в виду самообновление), когда я обновляю виджет из какой-либо активности. Это происходит до onUpdate виджета приложения (отображается журнал). но не входит в адаптер просмотра списка, чтобы заполнить его свежими данными.

public void onUpdate(Context context, AppWidgetManager appWidgetManager,

int[] appWidgetIds) {
    final int N = appWidgetIds.length;
    for (int i = 0; i < N; i++) {
        int appWidgetId = appWidgetIds[i];

        Log.e("called", "onupdate");

        RemoteViews views = new RemoteViews(context.getPackageName(),
                R.layout.widget_lay);

        views.setTextViewText(R.id.textView1,
                "Floating Text will be displayed here .. Daily Thoughts");

        Intent intent = new Intent(context, RemoteServiceEmin.class);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
        views.setRemoteAdapter(R.id.gridview, intent);

        // inflating list remote view

        Intent intentlist = new Intent(context, ListInflater.class);
        intentlist.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                appWidgetId);
        intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
        views.setRemoteAdapter(R.id.listview, intentlist);

        // setting onclick on gridview
        Intent itemClickIntent = new Intent(context, MyWidgetProvider.class);
        itemClickIntent.setAction(ITEM_CLICK_ACTION);
        itemClickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                appWidgetIds[i]);
        PendingIntent itemClickPendingIntent = PendingIntent.getBroadcast(
                context, 0, itemClickIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);
        views.setPendingIntentTemplate(R.id.gridview,
                itemClickPendingIntent);

        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
    super.onUpdate(context, appWidgetManager, appWidgetIds);

}

person user2660060    schedule 08.08.2013    source источник


Ответы (1)


Итак, наконец, это сделано, и снова все благодаря developer.android.com. Все, что вам нужно сделать, это запустить широковещательную рассылку, откуда вы хотите обрабатывать «обновление».

Intent initialUpdateIntent = new Intent(
                AppWidgetManager.ACTION_APPWIDGET_UPDATE);
        initialUpdateIntent
                .setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
        sendBroadcast(initialUpdateIntent);

а затем поймайте его в onRecieve of Appwidget и обновите Remoteview, используя

 notifyAppWidgetViewDataChanged(). 

Что-то вроде фрагмента кода ниже

 else if (intent.getAction().equals(
            AppWidgetManager.ACTION_APPWIDGET_UPDATE)) {

         AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);

            ComponentName thisAppWidget = new ComponentName(context.getPackageName(), MyWidgetProvider.class.getName());
            int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget);
             appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds,  R.id.listviewnew);
           Log.e("finally after a whole day", "working :");  

    }
person user2660060    schedule 08.08.2013
comment
Этот метод нестабилен: 1. AppWidgetProvider принимает трансляцию примерно за 4 секунды; 2. Иногда AppWidgetProvider просто не может принять трансляцию. Пожалуйста, используйте метод в stackoverflow.com/a/7738687/903665 - person skyin; 21.01.2017
comment
В дополнение к этому решению я повторил функциональность метода onCreate в методе onDataSetChanged, создав еще один метод для загрузки данных и совместного использования обоими методами. - person Armando Peña; 03.03.2019