0
AppWidgetProvider 클래스의 onUpdate() 섹션에서 시작된 서비스로 업데이트되는 App 위젯에서 작업하고 있습니다. 문제는 위젯 서비스 내에서 커서를 사용할 때마다 뷰가 위젯에 추가되지 않는다는 것입니다. SQL 쿼리/결과를 단순히 문자열로 바꾸면 작동합니다. 는 SQL 결과를 반환하고, 뷰가 추가 되더라도,SQlite 쿼리를 사용하는 Android 앱 위젯
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;
}
}
이 작업 예제는 내가하려고 지난 주 썼다
있는 LinearLayout ID가 "test_widget_items"내 삽입 된 전망 레이아웃 "test_widget"를 보여줍니다 SQL 결과를 사용하려면이 위젯을 얻으십시오.
난 그냥 대신 전체 DB를 인스턴스화의) TestWidgetService.this.openOrCreateDatabase을 (시도했습니다 도우미 클래스지만, 같은 문제가있어, 추가 된보기가 결과가 올바르게 읽혀 지더라도 (그리고 LogCat에 표시 되더라도) 위젯에는 표시되지 않습니다. – Andre