我正在开发一个App Widget,它正在由一个服务进行更新,从AppWidgetProvider类的onUpdate()部分开始。问题是,每当我在窗口小部件服务中使用游标时,视图都不会添加到窗口小部件中。如果我只是替换字符串的sql查询/结果,它就可以工作。
不工作示例(使用ContentProvider / SQL):
public class TestWidgetService extends Service {
@Override
public void onStart(Intent intent, int startId) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());
ComponentName thisWidget = new ComponentName(getApplicationContext(), TestWidget.class);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
for (int widgetId : allWidgetIds) {
RemoteViews remoteViews = new RemoteViews(
getApplicationContext().getPackageName(),
R.layout.test_widget
);
// get items
Uri items = Uri.parse(TestWidgetContent.CONTENT_URI + "/news/1");
Cursor iCursor = getContentResolver().query(items, null, null, null, "ITM_TIMESTAMP DESC");
if (iCursor == null) {
continue;
}
else if (iCursor.moveToFirst()) {
while (iCursor.isAfterLast() == false) {
Log.w("got", iCursor.getString(iCursor.getColumnIndex("FED_TITLE")));
RemoteViews item = new RemoteViews(
getApplicationContext().getPackageName(),
R.layout.test_widget_item
);
item.setTextViewText(
R.id.test_widget_item_feed,
iCursor.getString(iCursor.getColumnIndex("FED_TITLE"))
);
item.setTextViewText(
R.id.test_widget_item_title,
iCursor.getString(iCursor.getColumnIndex("ITM_TITLE"))
);
remoteViews.addView(R.id.test_widget_items, item);
iCursor.moveToNext();
}
}
iCursor.close();
//
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
stopSelf();
super.onStart(intent, startId);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
此示例仅显示没有添加视图的布局“test_widget”,即使sql返回结果并添加了视图。
工作示例(仅限字符串):
public class TestWidgetService extends Service {
@Override
public void onStart(Intent intent, int startId) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());
ComponentName thisWidget = new ComponentName(getApplicationContext(), TestWidget.class);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
for (int widgetId : allWidgetIds) {
RemoteViews remoteViews = new RemoteViews(
getApplicationContext().getPackageName(),
R.layout.test_widget
);
// get items
RemoteViews item = new RemoteViews(
getApplicationContext().getPackageName(),
R.layout.test_widget_item
);
item.setTextViewText(
R.id.test_widget_item_feed,
"feed"
);
item.setTextViewText(
R.id.test_widget_item_title,
"title"
);
remoteViews.addView(R.id.test_widget_items, item);
//
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
stopSelf();
super.onStart(intent, startId);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
这个工作示例显示了布局“test_widget”,其中的视图插入了LinearLayout id“test_widget_items”
我上周试图让这个小部件使用sql结果,任何人都有任何小小的想法可能出错?
答案 0 :(得分:0)
原来这是模拟器的问题,在删除AVD快照并再次启动应用程序后,小部件很好