在Android的主屏幕小部件中填充ListView

我试图创build一个包含元素(任务)列表的Android小部件。

当我把小部件放在主屏幕上时,它是空的,没有任何任务显示。

我不理解缺less的东西。

在此先感谢您的帮助。

这是我的widget_layout.xml的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> 

这是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" /> 

这是我的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); } } } 

这是我的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 } } 

remoteViewsService只是返回工厂的一个实例。

编辑:我忘了在清单中声明服务。 现在我得到的部件填充了正确数量的项目,但与消息“加载”,而不是我想要显示的项目的名称

Solutions Collecting From Web of "在Android的主屏幕小部件中填充ListView"