Llenado de ListView en widget de pantalla de inicio en Android

Estoy tratando de crear un widget de Android que contenga una lista de elementos (tareas).

Cuando coloco el widget en la pantalla de inicio está vacío, no se muestra ninguna tarea.

No entiendo lo que falta.

Gracias de antemano por tu ayuda.

Aquí está el xml para mi widget_layout.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/widget_background" android:orientation="vertical" > <TextView android:id="@+id/title" style="@android:style/TextAppearance.Medium" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="4dip" android:gravity="center_horizontal" android:text="@+string/TASK_LIST_ACT" > </TextView> <ListView android:id="@+id/list" style="@android:style/TextAppearance.Medium" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> 

Este es el diseño de los elementos de ListView

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/widget_element" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?android:attr/listPreferredItemHeight" /> 

Esta es mi clase widgetProvider

 package it.geotask.android.widget; import it.geotask.android.R; 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 TaskWidgetProvider extends AppWidgetProvider { public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); for (int i = 0; i < appWidgetIds.length; ++i) { Intent intent = new Intent(context, GeotaskRemoteViewService.class); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]); intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout); rv.setRemoteAdapter(appWidgetIds[i], R.id.list, intent); rv.setEmptyView(R.id.list, R.id.empty_view); appWidgetManager.updateAppWidget(appWidgetIds[i], rv); } } } 

Y este es mi RemoteViewsFactory

 package it.geotask.android.widget; import it.geotask.android.R; import it.geotask.android.dto.Task; import it.geotask.android.service.TaskService; import java.util.ArrayList; import java.util.List; import android.appwidget.AppWidgetManager; import android.content.Context; import android.content.Intent; import android.widget.RemoteViews; import android.widget.RemoteViewsService; public class GeoTaskRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory { private Context context = null; private int appWidgetId; private List<Task> taskList = new ArrayList<Task>(); public GeoTaskRemoteViewsFactory(Context context, Intent intent) { this.context = context; appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); } public int getCount() { return taskList.size(); } public long getItemId(int position) { return taskList.get(position).getId(); } public RemoteViews getLoadingView() { // TODO Auto-generated method stub return null; } public RemoteViews getViewAt(int position) { RemoteViews row = new RemoteViews(context.getPackageName(), R.layout.row); row.setTextViewText(android.R.id.text1, taskList.get(position) .getName()); return (row); } public int getViewTypeCount() { // TODO Auto-generated method stub return 0; } public boolean hasStableIds() { // TODO Auto-generated method stub return false; } public void onCreate() { taskList = TaskService.getTaskInStateList(context, context .getResources().getString(R.string.DB_STATE_ACTIVE)); taskList.addAll(TaskService.getTaskInStateList(context, context .getResources().getString(R.string.DB_STATE_IN_RANGE))); taskList.addAll(TaskService.getTaskInStateList(context, context .getResources().getString(R.string.DB_STATE_DELAYED))); } public void onDataSetChanged() { // TODO Auto-generated method stub } public void onDestroy() { // TODO Auto-generated method stub } } 

El remoteViewsService simplemente devuelve una instancia de la fábrica.

EDIT: me olvidé de declarar el servicio en el manifiesto; Ahora tengo el widget lleno con el número correcto de elementos, pero con el mensaje "carga" en lugar del nombre del elemento que quiero mostrar

Resuelto. Yo estaba siguiendo el ejemplo de google de stackWidget, y utilizan un para en la matriz widgetIds, incrementando el cursor int con ++ i, hace que el widget no funcione. Utilizado i ++ y funciona

  • Ninepatch escala incorrecta al desplazarse después de aplicar un filtro de color?
  • ¿Cómo implementar autocompletetextview con listview?
  • ArrayAdapter en android para crear listview simple
  • Vista de lista con la opción de actualización y supresión mediante contextmenu
  • Cómo restablecer listview después de searchview se cierra en android?
  • Cree dinámicamente un listview con filas de encabezado para cada mes
  • Estado de Checkbox de Android save en ListView con Cursor Adapter
  • Cómo detectar si un ListView se desplaza rápidamente
  • Android ListView: obtenga una distancia de desplazamiento
  • El método get (String) no está definido para el tipo String error al agregar los códigos a la clase filter del adaptador en android
  • Android: ¿Los elementos de las listas no se vuelven naranjas cuando se hace clic?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.