2013-05-11 17 views
6

を実行し、私はRemoteViewsServiceの拡張するクラスを実装する必要はありませんが、このクラスは実行しない、私のコードは以下の通りです:RemoteViewsServiceは、私は内部のリストでウィジェットをやりたい、

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); 
    } 
} 

とマニフェスト

<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> 

編集; 私は私が使用する必要があり、エラーを発見した:

views.setRemoteAdapter(R.id.events_list, updateIntent); 

代わりの

views.setRemoteAdapter(appWidgetId, updateIntent); 

答えて

1

も、3つのパラメータを持つSetRemoteAdapter機能はAPIレベル14+で廃止されRemoteViews.html#setRemoteAdapter

を参照してください、と3つのパラメータを1つ呼び出すと、ウィジェットのidパラメータは無視されます。そのため、関数は常に2つの有効なパラメータ、つまりview_idとintentだけを受け取ります。

この関数は基本的には、インテントをビューのデータソース(view_idで示される)として使用すると言います。私にとって

0

これは

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    super.onUpdate(context, appWidgetManager, appWidgetIds); 
    for (int widgetId : appWidgetIds) { 
     RemoteViews mView = initViews(context, appWidgetManager, widgetId); 
     appWidgetManager.updateAppWidget(widgetId, mView); 
    } 

    super.onUpdate(context, appWidgetManager, appWidgetIds); 
} 



@SuppressWarnings("deprecation") 
@SuppressLint("NewApi") 
private RemoteViews initViews(Context context, 
           AppWidgetManager widgetManager, int widgetId) { 

    RemoteViews mView = new RemoteViews(context.getPackageName(), 
      R.layout.widget_layout); 

    Intent intent = new Intent(context, WidgetService.class); 
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId); 

    intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 
    mView.setRemoteAdapter(widgetId, R.id.widgetCollectionList, intent); 

    return mView; 
} 
の作品
関連する問題