tôi muốn làm một widget với một danh sách bên trong, tôi phải thực hiện một lớp mở rộng của RemoteViewsService, nhưng lớp này không bao giờ thực hiện, mã của tôi là như sau:RemoteViewsService không thực hiện,
MyWidgetProvider
public class MyWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget);
Intent updateIntent = new Intent(context, WidgetService.class);
for (int appWidgetId : appWidgetIds) {
updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
updateIntent.setData(Uri.parse(updateIntent.toUri(Intent.URI_INTENT_SCHEME)));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
views.setRemoteAdapter(appWidgetId, updateIntent);
else
views.setRemoteAdapter(appWidgetId, R.id.events_list, updateIntent);
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, R.id.events_list);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}
WidgetService
public class WidgetService extends RemoteViewsService {
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return new WidgetFactory(getApplicationContext(), intent);
}
}
Và Manifest
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.widget.example"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name=".MyWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/appwidget_info" />
</receiver>
<service android:name=".WidgetService"
android:permission="android.permission.BIND_REMOTEVIEWS"
android:exported="false">
</service>
</application>
Chỉnh sửa; tôi đã tìm thấy lỗi, tôi phải sử dụng:
views.setRemoteAdapter(R.id.events_list, updateIntent);
thay vì
views.setRemoteAdapter(appWidgetId, updateIntent);