2014-09-18 2 views
0

С помощью приведенного ниже кода мы получаем список всех виджетов для Android.Как получить идентификатор виджета Android отдельного виджета?

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 
ComponentName thisAppWidget = new ComponentName(context, WidgetProvider.class); 
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget); 

Но как я могу получить идентификатор виджета, который я только что нажал? Это означает, что у меня есть 3 или 4 виджета, и когда я нажимаю на один из них, мне нужно получить идентификатор виджета, на который я нажал.

Как это получить? Я попытался ниже функции

public static int getWidgetId(Intent intent) { 
    Bundle extras = intent.getExtras(); 
    int appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; 
    if (extras != null) { 
     appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); 
    } 
    return appWidgetId; 
} 

Но это не работает для меня.

ответ

0

Я предполагаю, что вы устанавливаете setOnClickPendingIntent() в один из элементов макета вашего виджета. Просто установите appWidgetId в качестве дополнительного для вашего Intent.
Следуя основной идее:

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    final int N = appWidgetIds.length; 
    int appWidgetId; 

    // Create an Intent for every Widget by iterating over the appWidgetIds array 
    // appWidgetIds array contains all Widgets 
    for (int i = 0; i < N; ++i) { 
     appWidgetId = appWidgetIds[i]; 

     Intent intent = new Intent(context, MyClass.class); 
     // Add the appWidgetId to the Intent 
     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
     PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, intent, 
       PendingIntent.FLAG_CANCEL_CURRENT); 

     // TODO init RemoteViews 
     remoteViews.setOnClickPendingIntent(R.id.myView, pendingIntent); 
     appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews); 
    } 
    super.onUpdate(context, appWidgetManager, appWidgetIds); 
} 

Делая это, вы можете вызвать вашу функцию getWidgetId в вашей деятельности и должны получить соответствующую appWidgetId.

Смежные вопросы