ホーム画面のアプリウィジェットのリストビューで一部のアイテムを無効にすることはできますか?
現在、リストビューにPendingIntentテンプレートを使用しており、各行のインテントにfillIntentを入力しています。私がやろうとしているのは、タイトルや他の種類のアイテムがどこにも通じない場合にアイテムが押されたときにセレクターの背景を表示しないことです。通常のリストビューでは、isEnabledを使用して解決しますが、 RemoteViewsFactoryには存在しません。
私のAppWidgetProviderは次のようになります。
public class StreamsWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
final int N = appWidgetIds.length;
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
//set service for list view
Intent listIntent = new Intent(context, StreamsWidgetService.class);
listIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
listIntent.setData(Uri.parse(listIntent.toUri(Intent.URI_INTENT_SCHEME)));
views.setRemoteAdapter(R.id.streamItemsList, listIntent);
Intent intent = new Intent(context, StreamsWidgetProvider.class);
intent.setAction(ACTION_START_ACTIVITY);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
views.setPendingIntentTemplate(R.id.streamItemsList, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}
上記のappWidgetProviderが接続するRemoteViewsServiceでインスタンス化されるRemoteViewsFactoryは次のとおりです。
private class StreamItemWidgetFactory implements RemoteViewsService.RemoteViewsFactory {
...
@Override
public RemoteViews getViewAt(int position) {
...
if(isEnabled) {
...
Intent intent = new Intent();
intent.putExtra(StreamsWidgetProvider.BROADCAST_PARAM_ITEM_ID, item.getId());
...
rv.setOnClickFillInIntent(R.id.streamItemRowId, intent);
}
...
return item;
}
...
}
ListViewアダプタと同じ機能を取得することは可能ですか?特定の行のpendingIntentを何らかの方法で削除できますか?