5

メソッドを使用して ListView ウィジェットのリスト行をクリック可能にしようとしていsetOnClickFillInIntentますが、ListItem をクリックしても何も起こりません。ここに私のコードのいくつかの重要な部分があります:

Intent i = new Intent();
Bundle extras = new Bundle();

extras.putInt(Resource.WIDGET_PACKAGE, position);
i.putExtras(extras);
row.setOnClickFillInIntent(R.id.widget_layout_parent, i);

これはgetView()、ViewFactory の最後にあります。Resource.WIDGET_PACKAGE にはパッケージ名が含まれており、他のキーと同じです。位置 int はgetView()パラメーターからのものです。R.id.widget_layout_parentすべてのリスト項目の親レイアウトです。

これが私の WidgetProviders の終わりですonUpdate()

Intent clickIntent = new Intent(context, ItemListActivity.class);

PendingIntent clickPI = PendingIntent.getActivity(context, 0,
        clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);

widget.setPendingIntentTemplate(R.id.widget_layout_parent, clickPI);

appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds[i],
        R.id.widget_list_view);

私が見逃していることはありますか、それとも他に知りたいことはありますか?

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

4

2 に答える 2

20

を呼び出す場合setPendingIntentTemplate(...)idは AdapterView (この場合は ListView) のものである必要があります。を呼び出すとsetOnClickFillInIntent(...)idアイテム レイアウトのルート ビューのビューになるはずです。元の投稿を正しく読んでいれば、これはすでに行っていることです。

public void onUpdate(Context context, AppWidgetManager manager, int[] appWidgetIds) {
    /* ... */
    widget.setPendingIntentTemplate(R.id.appwidget_listview, clickPI);
    /* ... */
}

public RemoteViews getViewAt(int position) {
    /* ... */
    row.setOnClickFillInIntent(R.id.widget_layout_parent, intent);
    /* ... */
    return row;
}
于 2013-01-28T17:10:59.603 に答える
4

@karakuriによる上記の回答は完璧に機能します。

setPendingIntentTemplate と setOnClickFillInIntent の両方を一緒に使用する必要があります。一方が他方なしでは機能しません。

于 2013-07-10T02:54:24.247 に答える