Android-виджет с ListView не загружает элементы соответствия

Я пытаюсь реализовать виджет для моего приложения с ListView.

Для этого я пошагово по всем ссылкам:

  • Виджет приложений для Android с представлением списка
  • Использование виджета приложений с коллекциями – developer.android.com/guide/topics/appwidgets/index.html#collections
  • Заполнение ListView в виджетах рабочего стола в Android – stackoverflow.com/questions/14121602/filling-listview-in-homescreen-widget-in-android

Однако, когда я размещаю виджет на главном экране, количество элементов списка соответствует количеству элементов, которые у меня есть в базе данных, но представление каждой строки не обновляется и продолжает показывать «Загрузка …» (как показано в Этот захват экрана )

Я не понимаю, чего не хватает.

Большое спасибо за вашу помощь!

Вот мой AppWidgetProvider:

package com.appro.illbeback; import com.appro.illbeback.R; import com.appro.illbeback.data.CallsDataSrouce; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.widget.RemoteViews; public class CallsAppWidgetProvider extends AppWidgetProvider { private CallsDataSrouce dataSource; @SuppressWarnings("deprecation") @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) { dataSource = new CallsDataSrouce(context); dataSource.open(); for (int i = 0; i < appWidgetIds.length; i++) { Intent serviceIntent = new Intent(context, WidgetService.class); serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]); serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME))); // Which layout to show on widget RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget); // Setting the adapter for listview of the widget remoteViews.setRemoteAdapter(appWidgetIds[i], R.id.listViewWidget, serviceIntent); // Setting an empty view in case of no data remoteViews.setEmptyView(R.id.listViewWidget, R.id.empty_view); // Application Launcher Intent launchActivity = new Intent(context, Main.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, launchActivity, 0); remoteViews.setOnClickPendingIntent(R.id.imageViewAppLauncher, pendingIntent); // Number of Calls Text String numOfCallsText = dataSource.getNumberOfCalls() + " Calls"; remoteViews.setTextViewText(R.id.textViewNunberOfCalls, numOfCallsText); appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews); } super.onUpdate(context, appWidgetManager, appWidgetIds); } } 

Вот RemoteViewsService:

 public class WidgetService extends RemoteViewsService { @Override public RemoteViewsFactory onGetViewFactory(Intent intent) { RemoteViewsFactory listProvidder = new CallsListRemoteViewsFactory(this.getApplicationContext(), intent); return listProvidder; } } 

Вот мой RemoteViewFactory:

 package com.appro.illbeback; import java.util.List; import com.appro.illbeback.R; import com.appro.illbeback.data.CallItem; import com.appro.illbeback.data.CallsDataSrouce; import android.content.Context; import android.content.Intent; import android.widget.RemoteViews; import android.widget.RemoteViewsService; public class CallsListRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory { private CallsDataSrouce mDataSource; private List<CallItem> mCallsList; private Context mContext = null; public CallsListRemoteViewsFactory(Context context, Intent intent) { this.mContext = context; } @Override public int getCount() { return mCallsList.size(); } @Override public long getItemId(int position) { return mCallsList.get(position).getId(); } @Override public RemoteViews getViewAt(int position) { RemoteViews row = new RemoteViews(mContext.getPackageName(), R.layout.widget_list_row_layout); CallItem callItem = mCallsList.get(position); String contactID = callItem.getContactID(); if (!contactID.equals(CallItem.CONTACT_ID_UNKOWN)) { row.setTextViewText(R.id.textViewWidgetContactName, callItem.getName()); } else { row.setTextViewText(R.id.textViewWidgetContactName, callItem.getNumber()); } return row; } @Override public RemoteViews getLoadingView() { return null; } @Override public int getViewTypeCount() { return 0; } @Override public boolean hasStableIds() { return false; } @Override public void onCreate() { mDataSource = new CallsDataSrouce(mContext); mDataSource.open(); mCallsList = mDataSource.findAllCalls(); } @Override public void onDataSetChanged() { mCallsList = mDataSource.findAllCalls(); } @Override public void onDestroy() { } } 

Solutions Collecting From Web of "Android-виджет с ListView не загружает элементы соответствия"

Вы можете проверить, есть ли какие-либо представления в макете, которые не поддерживаются RemoteViews ( http://developer.android.com/guide/topics/appwidgets/index.html#collections ). У меня была такая же проблема из-за флажка в макете списка. После его удаления список был показан правильно.

Нашли решение !!! Проблема была в моем RemoteViewsService. Функция getViewTypeCount вернула '0' вместо '1'.

Объяснение getViewTypeCount