我一直在尝试使用不同的方法在我的小部件中为ListView实现onClick事件,但没有用。
我的小部件在AndroidManifest.xml中定义:
<!-- Widget -->
<receiver android:name=".widget.AppWidgetProvider">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/app_widget_info"/>
</receiver>
<service android:exported="false" android:name=".widget.AppWidgetService" android:permission="android.permission.BIND_REMOTEVIEWS"/>
我的第一种方法是使用onReceive来接收意图并开始另一项活动:
// setPendingIntentTemplate in AppWidgetProvider
final Intent onClickIntent = new Intent(context, AppWidgetProvider.class);
onClickIntent.setAction(AppWidgetProvider.CLICK_ACTION);
onClickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
onClickIntent.setData(Uri.parse(onClickIntent.toUri(Intent.URI_INTENT_SCHEME)));
final PendingIntent onClickPendingIntent = PendingIntent.getBroadcast(context, 0,
onClickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
rv.setPendingIntentTemplate(R.id.widget_schedule_list, onClickPendingIntent);
// and setOnClickFillInIntent in the getViewAt() in RemoteViewsService.RemoteViewsFactory class
final Bundle extras = new Bundle();
final Intent fillInIntent = new Intent();
extras.putInt(TVTracWidgetProvider.EXTRA_ITEM, position);
fillInIntent.putExtras(extras);
rv.setOnClickFillInIntent(R.id.episode_schedule_widget_row, fillInIntent);
我的第二种方法是直接开始活动:
// setPendingIntentTemplate in AppWidgetProvider
TaskStackBuilder builder = TaskStackBuilder.create(context)
.addNextIntent(new Intent(context, MainActivity_.class));
builder.addNextIntent(new Intent(context, EpisodeActivity_.class));
rv.setPendingIntentTemplate(R.id.widget_schedule_list, builder.getPendingIntent(1, PendingIntent.FLAG_UPDATE_CURRENT));
// and setOnClickFillInIntent in RemoteViewsFactory getViewAt()
Bundle extras = new Bundle();
extras.putInt(EpisodeActivity.showIdExtra, episode.getShow().getId());
extras.putInt(EpisodeActivity.seasonNrExtra, episode.getSeasonNr());
extras.putInt(EpisodeActivity.episodeNrExtra, episode.getEpisodeNr());
Intent fillInIntent = new Intent();
fillInIntent.putExtras(extras);
rv.setOnClickFillInIntent(R.id.episode_schedule_widget_row, fillInIntent);
然而,这两种方法似乎都不起作用。 pendingIntentTemplate位于每个行项的父布局上的ListView的id和onClickFillInIntent上。任何人都可以解释一下可能导致点击不被解雇的原因吗?提前谢谢!
答案 0 :(得分:1)
问题是项目中的textViews有textIsSelectable =“true”。