小部件中的Android ListView onClick无法正常工作

时间:2013-01-28 16:13:31

标签: android android-widget android-listview remoteview android-pendingintent

我试图通过使用setOnClickFillInIntent方法使我的ListView小部件中的listrows可单击,但每当我点击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);

这是我的ViewFactory中getView()的结尾。 Resource.WIDGET_PACKAGE包含我的包名称,就像任何其他键一样。 position 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);

我有什么遗漏或者您还有什么想知道的吗?

感谢所有帮助! :)

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:4)

@karakuri的回答非常完美。

必须同时使用setPendingIntentTemplate和setOnClickFillInIntent。一个人没有另一个人就不会工作。