1

私はAndroid開発が初めてなので、ご容赦ください。

ホーム画面に配置すると構成アクティビティを開くウィジェットを作成しています。構成が完了して「完了」を押すと、ウィジェット プロバイダー (onUpdate) はウィジェット サービス クラスを呼び出して、ドローアブルのリストをグリッドビューにバインドすることになっています。ただし、サービス クラスは呼び出されておらず、グリッドビューは空になっています。これに関するヘルプは大歓迎です。コードは以下に含まれています。

*注: グリッドビューを含む main.xml と、グリッドビュー セルのテンプレート (imageView および textView) を含む別の xml があります。

マニフェスト:

<service android:name=".WidgetService" android:permission="android.permission.BIND_REMOTEVIEWS" android:exported="false" />

<receiver android:name=".WidgetProvider" android:label="@string/app_name">
  <intent-filter>
    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
  </intent-filter>
  <meta-data android:name="android.appwidget.provider" android:resource="@xml/button_widget_provider" />
</receiver>

プロバイダー:

public class WidgetProvider extends AppWidgetProvider {

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

 for (int i=0; i < appWidgetIds.length; i++){

   Intent intent = new Intent(context, WidgetService.class);
   intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
   intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));

   RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
   remoteViews.setRemoteAdapter(appWidgetIds[i], R.id.gridview, intent);

   appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
 }       

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

サービス:

public class WidgetService extends RemoteViewsService {

    @Override
    public RemoteViewsFactory onGetViewFactory(Intent intent){
            return new VZRemoteViewsFactory(this.getApplicationContext(), intent);
        }
    }

    class VZRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory{

       public VZRemoteViewsFactory(Context context, Intent intent){
            thisContext = context;
            appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
       }

       public void onCreate(){
            // code to add drawables to list here
       }

       public RemoteViews getViewAt(int position){
            RemoteViews remoteView = new RemoteViews(thisContext.getPackageName(), R.layout.vzwidget_item);

            //  setting the image view resource this way for now just for testing
            remoteView.setImageViewResource(R.id.launcher_icon, R.drawable.vzicon);
            remoteView.setTextViewText(R.id.textview, "test");

            return remoteView;
       }
.....(omitted code)}

ありがとう!

4

1 に答える 1

0

私の経験から (そして私自身が作成したばかりのウィジェットを見て) - OnUpdate は構成アクティビティが起動されたときに呼び出され、このアクティビティからの結果を公開した後、次のインテント アクションが appWidgetProvider に与えられます - android.appwidget.action .APPWIDGET_UPDATE_OPTIONS (ジェリービーンでテスト済み)。

これはこれを処理する最も適切な方法ではないかもしれませんが、これが私がこれを処理する方法です - 構成アクティビティが結果を公開するとき - リモート ビュー サービスを開始し、適切なウィジェット ID でビューの送信を開始します。

于 2012-11-26T21:15:09.980 に答える