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.
- El divisor desaparece del último elemento en listview si se agrega footerview
- Android Action Bar Search: ¿Cómo filtrar una lista por la propiedad de un elemento de la lista?
- Android listview muestra datos falsos después de desplazarse (adaptador personalizado)
- ¿Cómo dividir el texto en 2 textviews como si hubiera 1?
- ¿Hay alguna manera de probar las pestañas personalizadas de Chrome con Espresso?
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
- Cambio de fondo del elemento de vista de lista de Android
- Artículos de Android ListView que no llenan el ancho
- Cómo analizar el valor en el atributo en el análisis xml
- Lista emergente de hilandera personalizada en android
- Agregar la barra de progreso en la parte inferior de una vista de lista
- Cómo desactivar la selección resaltada en listview xamarin.forms en android
- Lista colgadaElector en ListView
- ¿Cómo configuro una imagen de fondo de ListView vacía?
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
- Práctica recomendada para descifrar archivos grandes con menos memoria
- La nueva instalación de Eclipse, R no se puede resolver a una variable