我正在尝试实现一个带有ListView的Android App小部件。 我开始跟随Google文档,但是我卡在了显示加载视图的列表上,而不是正常的列表项。 有人在小部件中使用列表视图有经验吗?
代码与Google文档中相同。 我使用ListView而不是StackView,并且数据源使用数据库(这不是问题,数据正确获取 - 我通过返回具有正确数据的普通列表项视图而不是默认加载视图来尝试了一下)
在互联网上搜索没有帮助我...我还尝试了这个教程,但也没有起作用。 我希望有人能帮助我,提前致谢!
小部件列表提供程序
代码与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);
}
}
小部件列表提供程序
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;
}
}