14

ListView がクリックされたときにユーザーがアクティビティを起動できるようにする ListView ウィジェットに取り組んでいます。これに関するチュートリアルを見つけることができなかったので、誰かが私を正しい方向に向けたり、コードを共有したりできるかどうか疑問に思っています. どのListItemがクリックされても同じアクティビティを起動したいので問題ありません。

すべての助けに感謝します!

4

2 に答える 2

43

ここを見て、小見出し「個々のアイテムに動作を追加する」までスクロールしてください。

実装とsetPendingIntentTemplate()実装の両方から呼び出していることを確認する必要があります。AppWidgetProvider setOnClickFillInIntent()RemoteViewsService.RemoteViewsFactory

例えば:

public class Widget extends AppWidgetProvider {

    // ...

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

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

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

            Intent startActivityIntent = new Intent(context, myActivity.class);
            PendingIntent startActivityPendingIntent = PendingIntent.getActivity(context, 0, startActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT);
            widget.setPendingIntentTemplate(R.id.list_view, startActivityPendingIntent);

            appWidgetManager.updateAppWidget(appWidgetIds[i], widget);

            // ...
    }
}

public class WidgetAdapter implements RemoteViewsService.RemoteViewsFactory {

    // ...

    @Override
    public RemoteViews getViewAt(int position) {

    RemoteViews widgetRow = new RemoteViews(context.getPackageName(), R.layout.widget_row);

        Intent fillInIntent = new Intent();
        fillInIntent.putExtra(Widget.EXTRA_LIST_VIEW_ROW_NUMBER, position);
        widgetRow.setOnClickFillInIntent(R.id.list_view_row, fillInIntent);

        // ...

        return widgetRow;
    }
}

SDK サンプルにある StackWidget サンプルには、より決定的な例がありますが、見つけるのが少し難しいことがわかりました (手順については、こちらを参照してください)。トースト メッセージを表示するインテントを作成しますが、同じコードを使用します。

于 2013-02-11T12:12:03.680 に答える
-10

アクティビティを起動するには、インテントを作成してから、そのインテントで startActivity を呼び出します。Intent と startActivity を確認してください。自分でできると確信しています。

于 2013-01-12T23:58:16.457 に答える