2

私は主に自分のやりたいことを行うウィジェットを持っています (インテントを開始します) が、どうすれば複数のインテントを 1 つのウィジェット プロバイダーに詰め込むことができるのか疑問に思っています。

これを行うための通常の手段をすべて試しました:

  • 複数のインテントを使用する
  • 同じテーマ設定で 2 番目のウィジェットを使用し、最終的に失敗したいくつかの他のウィジェットをあちこちで使用しました。

汎用コード:

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

        Intent startIntent = new Intent(context, myClass.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, startIntent, 0);

        // Get the layout for the App Widget and attach an on-click listener to the button
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.MyWidget);
        views.setOnClickPendingIntent(R.id.startBtn, pendingIntent);

        // Tell the AppWidgetManager to perform an update on the current App Widget
        appWidgetManager.updateAppWidget(appWidgetId, views);
    }       
}

だから私は、ウィジェットに複数のボタンを取得する方法を理解しようとしています。3つに設定されているので、そのうちの1つが機能することがわかっているので、1/3です。

XML は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/startBtn"
    android:layout_width="150dp"
    android:layout_height="75dp"
    android:layout_marginBottom="5dp"
    android:background="@drawable/mybg"
    android:gravity="center"
    android:text="First Menu Item"
     />

<TextView
    android:id="@+id/startBtn2"
    android:layout_width="150dp"
    android:layout_height="75dp"
    android:layout_marginBottom="5dp"
    android:background="@drawable/mybg"
    android:gravity="center"
    android:text="Second menu item" />

<TextView
    android:id="@+id/startBtn3"
    android:layout_width="150dp"
    android:layout_height="75dp"
    android:layout_marginBottom="5dp"
    android:background="@drawable/mybg"
    android:gravity="center"
    android:text="Third menu item" />

</LinearLayout>
4

1 に答える 1

1

OK、ほとんど理解できました。アイデアは、3 つの異なるPendingIntentsと 3つの異なる を作成してから、 3 回Intents呼び出すことです。setOnClickPendingIntentアクションとボタンごとに 1 つ。以下は、3 つのアクティビティーが myClass、myClass2、および myClass3 であると仮定した例です。以下のコードでは、各ボタンが異なるインテントを起動します。

for (int appWidgetId : appWidgetIds) {

    Intent startIntent = new Intent(context, myClass.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, startIntent, 0);

    Intent startIntent2 = new Intent(context, myClass2.class);
    PendingIntent pendingIntent2 = PendingIntent.getActivity(context, 0, startIntent2, 0);

    Intent startIntent3 = new Intent(context, myClass3.class);
    PendingIntent pendingIntent3 = PendingIntent.getActivity(context, 0, startIntent3, 0);

    // Get the layout for the App Widget and attach an on-click listener to the button
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.MyWidget);
    views.setOnClickPendingIntent(R.id.startBtn, pendingIntent);
    views.setOnClickPendingIntent(R.id.startBtn2, pendingIntent2);
    views.setOnClickPendingIntent(R.id.startBtn3, pendingIntent3);


    // Tell the AppWidgetManager to perform an update on the current App Widget
    appWidgetManager.updateAppWidget(appWidgetId, views);
}  
于 2012-08-15T17:26:41.313 に答える