按下小部件ListView项时的Android启动活动

时间:2013-01-12 23:49:19

标签: android listview android-intent widget click

我正在使用ListView小部件,我希望用户能够在单击ListView时启动活动。我还没有找到任何关于此的教程,所以我想知道是否有人能指出我正确的方向或者可能分享一些代码。我想要启动相同的活动,无论单击哪个ListItem,这都不是问题。

感谢所有帮助!

2 个答案:

答案 0 :(得分:37)

查看here并滚动到小标题向个别项目添加行为

您需要确保从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;
    }
}

StackWidget示例中有一个更确凿的例子,它位于SDK samples,但我发现它有点难以找到(请参阅here了解方向)。它创建了一个显示Toast消息的意图,但它使用相同的代码。

答案 1 :(得分:-9)

要启动任何活动,您需要创建一个Intent,然后在该意图上调用startActivity。检查Intent和startActivity,我相信你能够自己完成。