2013-01-12 14 views
13

Pracuję nad widgetem ListView, w którym chcę, aby użytkownik mógł uruchomić działanie po kliknięciu ListView. Nie byłem w stanie znaleźć żadnego tutoriala na ten temat, więc zastanawiam się, czy ktoś mógłby wskazać mi właściwy kierunek, czy może udostępnić jakiś kod. Chcę uruchomić tę samą aktywność niezależnie od tego, który przycisk ListItem został kliknięty, więc nie stanowi to problemu.Aktywność uruchamiania Androida po naciśnięciu elementu Widżet ListView

Cała pomoc jest doceniana!

Odpowiedz

35

Obejrzyj here i przejdź do podpozycji Dodawanie zachowania do poszczególnych pozycji.

Musisz upewnić się, że zarówno setPendingIntentTemplate() zadzwonić ze swojego AppWidgetProviderisetOnClickFillInIntent() od implementacji RemoteViewsService.RemoteViewsFactory.

Na przykład:

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; 
    } 
} 

Jest bardziej rozstrzygające przykład w próbce StackWidget który jest w SDK samples, chociaż uważam, że to trochę trudne do znalezienia (patrz here dla kierunków). Tworzy intencję, aby pokazać wiadomość Toast, ale używa tego samego kodu.

+0

Myślę, że to jest łatwiejsze: http://stackoverflow.com/a/20774402/878126 –

+0

Jedyną rzeczą, która zadziałała dla mnie. Dziękuję – IHeartAndroid

+0

wygląda na to, że dostaje wszystkie dane z ListView, więc po przejściu do działania nie zwraca poprawnego dodatkowego, które podałeś. Jak rozwiązać ten problem? – natsumiyu

-8

Aby uruchomić dowolne działanie, należy utworzyć zamiar, a następnie wywołać funkcję startActivity w tym celu. Sprawdź Intent i startActivity i jestem pewien, że możesz to zrobić samodzielnie.

+0

Oczywiście wiem, jak uruchomić działanie w zwykły sposób. Zastanawiam się, jak to zrobić z widżetem ListView, ponieważ zwykły PendingIntent nie zadziała. – SweSnow

Powiązane problemy