我正在尝试使用ListView实现Android App Widget.我开始关注Google文档但是我遇到了正在显示的加载视图列表,而不是正常的列表项.有没有人有小部件列表视图的经验?
代码与Google文档中的代码相同.我使用ListView而不是StackView作为数据源我使用数据库(这不是问题,数据是正确获得的 - 我通过返回正常的列表项视图而不是默认的加载视图尝试了这一点)
搜索互联网没有帮助我...我也试过这个教程,但它也没有用.我希望有人可以帮助我,提前谢谢!
WidgetProvider.java
public class WidgetProvider extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { for (int i = 0; i < appWidgetIds.length; i++) { Intent intent = new Intent(context, EventWidgetService.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); rv.setRemoteAdapter(android.R.id.list, intent); rv.setEmptyView(android.R.id.list, R.id.tvEmptyList); appWidgetManager.updateAppWidget(appWidgetIds[i], rv); } super.onUpdate(context, appWidgetManager, appWidgetIds); } }
WidgetService.java
public class EventWidgetService extends RemoteViewsService { @Override public RemoteViewsFactory onGetViewFactory(Intent intent) { return new EventsWidgetListProvider(getApplicationContext(), intent); } }
WidgetListProvider
public class EventsWidgetListProvider implements RemoteViewsFactory { private List<> _entities = new ArrayList<>(); private Context _context; // private int _appWidgetId; public EventsWidgetListProvider(Context context, Intent intent) { _context = context; // _appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); } @Override public void onCreate() { } private void refreshEntities() { // Request data from database _entities = RequestResult; } @Override public RemoteViews getViewAt(int position) { final RemoteViews remoteViews = new RemoteViews(_context.getPackageName(), R.layout.list_row); // Set data to remoteViews [remoteViews.setTextViewText(), remoteViews.setImageViewResource()] return remoteViews; } @Override public int getCount() { return _entities.size(); } @Override public long getItemId(int position) { return position; } @Override public void onDataSetChanged() { refreshEntities(); } @Override public void onDestroy() { } @Override public RemoteViews getLoadingView() { return new RemoteViews(_context.getPackageName(), R.layout.widget_loading); } @Override public int getViewTypeCount() { return 0; } @Override public boolean hasStableIds() { return false; } }
ianhanniball.. 5
你的getViewTypeCount
回报0
.根据文件:
如果适配器始终为所有项返回相同类型的View,则此方法应返回1.
通过返回0
,您告诉系统您没有要显示的视图类型.
你的getViewTypeCount
回报0
.根据文件:
如果适配器始终为所有项返回相同类型的View,则此方法应返回1.
通过返回0
,您告诉系统您没有要显示的视图类型.