3

ウィジェットがクリックされたときにさらに操作を実行する必要があります。このコードでは、onclick アクションはアクティビティを開くだけです。アクティビティを開く前に実行するアクティビティのようなコードと操作を追加できる onClickListener を追加することは可能ですか? これが私のコードです。

public class WidgetActivity extends AppWidgetProvider{

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

    super.onUpdate(context, appWidgetManager, appWidgetIds);
    for (int i = 0; i < appWidgetIds.length; i++) {
        int appWidgetId = appWidgetIds[i];


        Intent int1=new Intent();
        int1.setClass(context, Splash.class);

        PendingIntent pend1=PendingIntent.getActivity(context, 0, int1, 0);

        RemoteViews view1=new RemoteViews(context.getPackageName(),
                R.layout.widget_main_1);

        view1.setOnClickPendingIntent(R.id.repClear, pend1);
        appWidgetManager.updateAppWidget(appWidgetId, view1);

        }
}

}

画像1

画像2

画像1のアイコンをクリックすると、画像2のようにアイコンonClickの周りに6つの丸い円が表示されます。私を助けてください。

4

1 に答える 1

1

ウィジェットがクリックされたときにさらに操作を実行する必要があります。このコードでは、onclick アクションはアクティビティを開くだけです。アクティビティを開く前に実行するアクティビティのようなコードと操作を追加できる onClickListener を追加することは可能ですか?

実際のシナリオでは、要素をクリックするとアクティビティが呼び出されます。より多くの異なる操作を実行する場合は、Activity の代わりに Broadcast を呼び出す必要があります。

// calling Intent on your widget
Intent i = new Intent(context, WidgetActivity.class);           
i.setAction("your.intent.filter.action.name"); // assign intent action
int flag = PendingIntent.FLAG_UPDATE_CURRENT;
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, flag);
view1.setOnClickPendingIntent(R.id.repClear, pi);

onReceive()次に、ウィジェットにメソッドを実装する必要があります。

@Override
public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);
    if (intent.getAction().equals("your.intent.filter.action.name")) {
       // do your stuff
    }
}

他の PendingIntents についても同様です。

アップデート:

ウィジェットを更新する方法の例 (ほとんどどこからでも明示的に呼び出すことができます):

public static void updateWidget(Context c, boolean hide) {
    AppWidgetManager am = AppWidgetManager.getInstance(c);
    ComponentName thisWidget = new ComponentName(c, WidgetActivity.class);  
    int[] allWidgetIds = am.getAppWidgetIds(thisWidget);

    for (int widgetId: allWidgetIds) {  
        RemoteViews remoteViews = new RemoteViews(c.getPackageName(), layout);

        if (!hide) {
            remoteViews.setViewVisibility(viewId, View.VISIBLE);
        }
        else {
            remoteViews.setViewVisibility(viewId, View.INVISIBLE); // OR GONE
        }

        // finally calling request for update of widget
        am.updateAppWidget(widgetId, remoteViews);
    }
}

呼び出し:

@Override
public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);

    if (intent.getAction().equals("your.intent.filter.action.name")) {
       updateWidget(context, false);
    }

    if (intent.getAction().equals("your.another.intent.filter.action.name")) {
       updateWidget(context, true);
    }
}
于 2013-11-01T08:11:54.553 に答える