【发布时间】:2012-12-27 06:37:42
【问题描述】:
我正在开发一个 ListView 小部件,我希望用户能够在单击 ListView 时启动一个活动。我还没有找到任何关于这方面的教程,所以我想知道是否有人可以指出我正确的方向或者分享一些代码。无论单击哪个 ListItem,我都想启动相同的活动,所以这不是问题。
感谢所有帮助!
【问题讨论】:
标签: android listview android-intent widget click
我正在开发一个 ListView 小部件,我希望用户能够在单击 ListView 时启动一个活动。我还没有找到任何关于这方面的教程,所以我想知道是否有人可以指出我正确的方向或者分享一些代码。无论单击哪个 ListItem,我都想启动相同的活动,所以这不是问题。
感谢所有帮助!
【问题讨论】:
标签: android listview android-intent widget click
查看here 并滚动到子标题向单个项目添加行为。
您需要确保从您的AppWidgetProvider 调用setPendingIntentTemplate() 和从您的RemoteViewsService.RemoteViewsFactory 实现调用setOnClickFillInIntent()。
例如:
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 samples 中的 StackWidget 示例中有一个更有说服力的示例,尽管我发现它有点难以找到(有关说明,请参阅here)。它创建了一个显示 Toast 消息的意图,但它使用相同的代码。
【讨论】:
要启动任何 Activity,您需要创建一个 Intent,然后在该 Intent 上调用 startActivity。检查 Intent 和 startActivity,我相信你可以自己做。
【讨论】: