2017-09-03 4 views
1

J'ai un widget qui affiche un texte simple et 3 boutons:Gérer plusieurs boutons à l'intérieur d'un widget - Android

  • Actualiser (Ramasse une autre chaîne aléatoire et l'affiche)
  • Copier (Copiez le contenu du textview le presse-papiers)
  • Share (Partager le contenu du textview aux médias sociaux et autres)

je déjà obtenu la configuration du bouton de rafraîchissement et fonctionne très bien, mais je ne peux pas sembler trouver un moyen pour gérer les deux autres boutons

PS. Je ne veux pas le code actuel, je sais déjà comment faire la copie et le partage j'ai juste besoin de savoir comment gérer les événements cliquez

Voici mon code à ce jour:

Button copy_content; 
Button share_content; 

void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { 
    /** Code below will be executed once the timer is over*/ 
    String widgetText = RandQuotes[rand.nextInt(RandQuotes.length)]; 

    // Construct the RemoteViews object 
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.quotes_widget); 
    views.setTextViewText(R.id.sayings, widgetText); 



    // Instruct the widget manager to update the widget 
    appWidgetManager.updateAppWidget(appWidgetId, views); 
} 

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    // There may be multiple widgets active, so update all of them 
    for (int appWidgetId : appWidgetIds) { 
     updateAppWidget(context, appWidgetManager, appWidgetId); 
    } 
    final int count = appWidgetIds.length; 

    for (int i = 0; i < count; i++) { 
     int widgetId = appWidgetIds[i]; 
     String on_sayings = RandQuotes[rand.nextInt(RandQuotes.length)]; 

     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), 
       R.layout.quotes_widget); 
     remoteViews.setTextViewText(R.id.sayings, on_sayings); 

     Intent intent = new Intent(context, HavamalWidget.class); 
     intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 
     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 
       0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     remoteViews.setOnClickPendingIntent(R.id.switch_trigger, pendingIntent); 
     appWidgetManager.updateAppWidget(widgetId, remoteViews); 
    } 

} 

Répondre

0

Juste faire des intentions en attente sur les boutons avec l'action. Ainsi, dans OnReceive() il suffit de vérifier l'action d'intention et de faire une certaine logique à ce sujet. Si vous faites des tâches longues, il vaut mieux faire toute logique IntentService.

Définir les intentions en attente sur vos boutons qui sont RemoteViews comme ceci:

public static final String ACTION_BUTTON_SHARE = "ACTION_BUTTON_SHARE"; 
public static final String ACTION_BUTTON_REFRESH = "ACTION_BUTTON_REFRESH"; 

Intent refreshIntent = new Intent(context, ExampleAppWidget.class) 
      .setAction(ACTION_BUTTON_REFRESH); 
PendingIntent refreshPI = PendingIntent.getBroadcast(context, 0, refreshIntent, 
      PendingIntent.FLAG_UPDATE_CURRENT); 
remoteViews.setOnClickPendingIntent(R.id.refresh_button, refreshPI); 

Intent shareIntent = new Intent(context, ExampleAppWidget.class) 
      .setAction(ACTION_BUTTON_SHARE); 
PendingIntent sharePI = PendingIntent.getBroadcast(context, 0, shareIntent, 
      PendingIntent.FLAG_UPDATE_CURRENT); 
remoteViews.setOnClickPendingIntent(R.id.share_button, refreshPI); 

Dans ExampleAppWidget.class (qui s'étend de AppWidgetProvider) remplacer la méthode OnReceive()

@Override 
public void onReceive(Context context, Intent intent) { 
    if (intent != null) { 
     if (intent.getAction().equals(ACTION_BUTTON_REFRESH)) { 
      //make some logic here on button refresh 
     } else if (intent.getAction().equals(ACTION_BUTTON_SHARE)) { 
      //make some logic here on button share 
     } else { 
      super.onReceive(context, intent); 
     } 
    } 
} 
+0

Je me suis perdu en suivant vos instructions, pouvez-vous poster la réponse complète s'il vous plaît? –

+0

il suffit de cocher réponse à nouveau –

+0

j'ai quelques problèmes avec 'CommonRemoteViewBuilder' et les boutons d'action' 'ACTION_BUTTON_COPY' et ACTION_BUTTON_REFRESH' est dit « ne peut pas résoudre le symbole » –