7

Ho problemi a rendere cliccabile il mio Widget. Il seguente codice funziona parzialmente. My Widget mostra un ListView con elementi. Facendo clic sul Widget in cui non è visualizzato alcun elemento, l'Intent funziona e l'attività inizia. Ma quando si fa clic su un elemento di ListView non accade nulla.Widget cliccabile Android con ListView non selezionabile su ListItems

Ecco il codice: WidgetProvicer:

public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds) { 


    for (final int iD : appWidgetIds) { 

     final RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout 
       .widget_layout); 

     final Intent intent = new Intent(context, TickWidgetService.class); 
     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, iD); 
     intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 
     remoteViews.setRemoteAdapter(R.id.WidgetItem, intent); 

     remoteViews.setEmptyView(R.id.WidgetItem, R.id.empty_view); 

     final Intent activityIntent = new Intent(context, MainActivity.class); 
     final PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, activityIntent, 0); 

     remoteViews.setOnClickPendingIntent(R.id.Widget, pendingIntent); 


     appWidgetManager.updateAppWidget(iD, remoteViews); 
     appWidgetManager.notifyAppWidgetViewDataChanged(iD, R.id.WidgetItem); 
    } 

    super.onUpdate(context, appWidgetManager, appWidgetIds); 
} 

widget_layout.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/Widget" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 
<ListView 
    android:id="@+id/WidgetItem" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:divider="#D3D3D3" 
    android:dividerHeight="1dp"/> 


<TextView 
    android:id="@+id/empty_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/darker_gray" 
    android:gravity="center" 
    android:text="@string/emptytext" 
    android:visibility="gone"/> 
</LinearLayout> 

Le ListViewItems non hanno pulsanti o qualsiasi.

Grazie per il vostro aiuto!

+0

Hai provato a fare solo elencare gli oggetti non cliccabili? Perché penso che catturino gli eventi click. Sovrascrivendo areAllItemsEnabled() in listview adapter o sth? – Beloo

+0

Non sto usando un adattatore. Ii ha un RemoteViewsFactory. Nel metodo getViewAt() aggiungo il contenuto a RemoteView, un RemoteView è un ListItem. – Tobi

risposta

3

finalmente si sta lavorando:

nel Profider onUpdate:

final Intent activityIntent = new Intent(context, MainActivity.class); 
final PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, activityIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
remoteViews.setPendingIntentTemplate(R.id.WidgetItem, pendingIntent); 

e nel ViewsFactory getViewAt:

Bundle infos = new Bundle(); 
infos.putInt(TickWidgetProvider.WIDGET_LISTID, this.listId); 
final Intent activityIntent = new Intent(); 
activityIntent.putExtras(infos); 

remoteView.setOnClickFillInIntent(R.id.widgetListItemLayout, activityIntent); 

Non so dove l'ho trovata, ma questo esempio ha aiutato me lo fa funzionare: https://github.com/commonsguy/cw-advandroid/tree/master/AppWidget/LoremWidget

+0

L'ho fatto funzionare rilevando l'evento click lungo l'intento in MainActivity. C'è un modo per riceverlo su onReceive()? Ho provato ma non ha funzionato. :( –