2013-01-12 14 views
13

Sto lavorando a un widget ListView in cui si desidera che l'utente possa avviare un'attività quando viene fatto clic su ListView. Non sono stato in grado di trovare alcun tipo di tutorial su questo quindi mi chiedo se qualcuno potrebbe indicarmi la giusta direzione o magari condividere un po 'di codice. Voglio lanciare la stessa attività indipendentemente da quale ListItem si fa clic, quindi non è un problema.Attività di avvio Android quando si preme il widget ListView item

Tutto l'aiuto è apprezzato!

risposta

35

Dai un'occhiata allo here e passa alla sottovoce Aggiunta di comportamenti a singoli articoli.

È necessario assicurarsi di chiamare sia setPendingIntentTemplate() dal AppWidgetProvideresetOnClickFillInIntent() dal RemoteViewsService.RemoteViewsFactory implementazione.

Ad esempio:

public class Widget extends AppWidgetProvider { 

    // ... 

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

     for(int i = 0; i < appWidgetIds.length; i++){ 

      RemoteViews widget = new RemoteViews(context.getPackageName(), R.layout.widget); 

      Intent startActivityIntent = new Intent(context, myActivity.class); 
      PendingIntent startActivityPendingIntent = PendingIntent.getActivity(context, 0, startActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
      widget.setPendingIntentTemplate(R.id.list_view, startActivityPendingIntent); 

      appWidgetManager.updateAppWidget(appWidgetIds[i], widget); 

      // ... 
    } 
} 

public class WidgetAdapter implements RemoteViewsService.RemoteViewsFactory { 

    // ... 

    @Override 
    public RemoteViews getViewAt(int position) { 

    RemoteViews widgetRow = new RemoteViews(context.getPackageName(), R.layout.widget_row); 

     Intent fillInIntent = new Intent(); 
     fillInIntent.putExtra(Widget.EXTRA_LIST_VIEW_ROW_NUMBER, position); 
     widgetRow.setOnClickFillInIntent(R.id.list_view_row, fillInIntent); 

     // ... 

     return row; 
    } 
} 

C'è un esempio più conclusiva nel campione StackWidget che è nel SDK samples, anche se ho trovato un po 'difficile da trovare (vedi here per le direzioni). Crea un intento di mostrare un messaggio Toast, ma usa lo stesso codice.

+0

penso che questo sia più semplice: http://stackoverflow.com/a/20774402/878126 –

+0

L'unica cosa che ha funzionato per me. Grazie – IHeartAndroid

+0

sembra che ottenga tutti i dati in ListView così quando vai all'attività non restituisce l'extra corretto che hai messo. Come risolvere questo? – natsumiyu

-8

Per avviare un'attività, creare un'intenzione e quindi chiamare startActivity su tale intenzione. Controlla Intent e startActivity e sono sicuro che sarai in grado di farlo da solo.

+0

Naturalmente so come avviare un'attività nel modo ordinario. Mi chiedo come lo si fa con un widget ListView poiché il PendingIntent ordinario non funzionerà. – SweSnow