2013-01-12 60 views
13

我正在處理ListView小部件,我希望用戶能夠在單擊ListView時啓動活動。我一直無法找到任何類型的教程,所以我想知道是否有人可以指向正確的方向或共享一些代碼。無論點擊哪個ListItem,我都想啓動相同的活動,所以這不是問題。按下小部件ListView項目時的Android開始活動

所有幫助表示讚賞!

回答

35

看一看here並滾動到子標題將行爲添加到單個項目

你需要確保你從你的AppWidgetProvidersetOnClickFillInIntent()RemoteViewsService.RemoteViewsFactory實現通話雙方setPendingIntentTemplate()

例如:

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

還有就是StackWidget樣品這是在SDK samples在更確鑿例如,雖然我發現有些難以找到(見here路)。它創建一個顯示Toast消息的意圖,但它使用相同的代碼。

+0

我認爲這很簡單:http://stackoverflow.com/a/20774402/878126 –

+0

唯一對我有用的東西。謝謝 – IHeartAndroid

+0

它似乎獲取ListView中的所有數據,因此在進行活動時它不會返回您放置的正確額外數據。如何解決這個問題? – natsumiyu

-8

要啓動任何Activity,請創建一個Intent,然後根據該意圖調用startActivity。檢查意向和startActivity,我相信你可以自己做。

+0

當然我知道如何以平常的方式開展一項活動。我想知道如何使用ListView小部件來完成它,因爲普通的PendingIntent不起作用。 – SweSnow

相關問題