我正在为我的Android应用制作一个主屏幕App Widget。在那个App Widget中有一个ListView。 ListView有一个自定义布局,有一个TextView&一个ImageButton。我在该ImageButton上设置PendingIntent以启动服务,如下所示:
Intent intent = new Intent(mContext, MyService.class);
intent.putExtra(MyConstants.MY_EXTRA, c.getString(c.getColumnIndex(MyColumns.MY_COLUMN_TITLE)));
intent.setAction(MyConstants.MY_ACTION);
PendingIntent pendingIntent = PendingIntent.getService(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
rv.setOnClickPendingIntent(R.id.MyImageButton, pendingIntent);
getViewAt
RemoteViewsFactory
方法中的。但是在单击ImageButton时,服务无法启动。
我已经为myService设置了一个带有MY_ACTION的intentfilter。并且在没有它的情况下也尝试过没有让事情发挥作用。
任何人都知道如何通过单击Android主屏幕App Widget中列表视图项内的按钮来启动服务?
一切正常,即ListView完全从SQLite数据库填充。
答案 0 :(得分:1)
来自android javadoc
public void setOnClickPendingIntent 相当于召唤 setOnClickListener(android.view.View.OnClickListener)启动 提供了PendingIntent。设置项目的点击操作时 在集合中(例如ListView,StackView等),这个方法会 不行。相反,请使用{@link RemoteViews#setPendingIntentTemplate(int,PendingIntent)in 与RemoteViews结合#setOnClickFillInIntent(int,Intent)。
在AppWidgetProvider的更新方法中,您必须添加
final PendingIntent clickPendingIntentTemplate = PendingIntent.getService...
views.setPendingIntentTemplate(R.id.widget_list, clickPendingIntentTemplate);
并在RemoteViewsFactory的getViewAt方法中:
final Intent fillInIntent = new Intent();
fillInIntent.putExtra(...);
views.setOnClickFillInIntent(R.id.widget_list_item, fillInIntent);