Android小部件:ListView上的PendingIntent未使用setPendingIntentTemplate和setOnClickFillInIntent调用

时间:2013-09-15 12:43:00

标签: android android-intent android-listview android-widget android-pendingintent

我一直在尝试使用不同的方法在我的小部件中为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上。任何人都可以解释一下可能导致点击不被解雇的原因吗?提前谢谢!

来源:weatherlistwidgetApp Widgets

1 个答案:

答案 0 :(得分:1)

问题是项目中的textViews有textIsSelectable =“true”。