我正在尝试使用ListView实现 Android App小部件。我开始关注Google文档,但我遇到了正在显示的加载视图列表,而不是正常的列表项。有没有人有小部件列表视图的经验?
代码与Google docs中的代码相同。我使用ListView而不是StackView作为数据源我使用数据库(这不是问题,数据是正确获得的 - 我已经尝试通过返回正常的列表项视图来使用正确的数据而不是默认的加载视图)< / p>
搜索互联网对我没有帮助......我也尝试了这个tutorial,但它也没有用。 我希望任何人都可以帮助我,提前谢谢!
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;
}
}
答案 0 :(得分:5)
您的getViewTypeCount
返回0
。根据{{3}}:
如果适配器始终为所有项返回相同类型的View,则此方法应返回1.
通过返回0
,您告诉系统您没有要显示的视图类型。
答案 1 :(得分:0)
就算您仍然不能解决问题:就我而言,我在清单视图项目布局中使用的是androidx类型的小部件,例如androidx.appcompat.widget.AppCompatTextView。更改为TextView并解决了该问题。