5

我正在尝试使用该方法使我的 ListView Widget 中的列表行可点击,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 回答