按下小部件ListView项目时Android开始活动

Posted

技术标签:

【中文标题】按下小部件ListView项目时Android开始活动【英文标题】:Android start activity when pressing widget ListView item 【发布时间】:2012-12-27 06:37:42 【问题描述】:

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

感谢所有帮助!

【问题讨论】:

【参考方案1】:

查看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 消息的意图,但它使用相同的代码。

【讨论】:

它似乎获取了 ListView 中的所有数据,因此在进行活动时,它不会返回您输入的正确额外数据。如何解决? 你能帮帮我吗?这是我的***.com/questions/39587137/… 谢谢。【参考方案2】:

要启动任何 Activity,您需要创建一个 Intent,然后在该 Intent 上调用 startActivity。检查 Intent 和 startActivity,我相信你可以自己做。

【讨论】:

我当然知道如何以普通方式发起活动。我想知道你是如何使用 ListView 小部件来实现的,因为普通的 PendingIntent 不起作用。

以上是关于按下小部件ListView项目时Android开始活动的主要内容,如果未能解决你的问题,请参考以下文章

如果您长时间按下小部件,我怎样才能在删除和信息之间创建一个“设置”按钮?

Android:使用 ListView 和 Service 从应用小部件开始活动

ListView.builder 小部件不滚动

带有集合(ListView)的Android小部件不显示项目

带有 ListView 的 Android 可点击小部件在 ListItems 上不可点击

Android小部件ListView项目点击不起作用