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

14

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

非常感谢您提供的所有帮助!

2个回答

44

请看这里,并滚动到子标题向单个项添加行为

您需要确保在您的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示例中有一个更具有决定性的例子,即StackWidget示例,尽管我发现它有些难以找到(查看此处获取指导)。它创建了一个意图来显示Toast消息,但使用的是相同的代码。


似乎它获取了ListView中的所有数据,因此当转到活动时,它不会返回您放置的正确额外信息。如何解决这个问题? - natsumiyu
你能帮我吗?这是我的链接:https://dev59.com/W5rga4cB1Zd3GeqPtujg 谢谢。 - natsumiyu

-10

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


1
当然,我知道如何以普通方式启动活动。我想知道的是,由于普通的PendingIntent不起作用,您如何使用ListView小部件启动它。 - SweSnow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接