2016-04-18 3 views
1

Je crée une notification personnalisée et l'ajout de boutons dynamiquement en utilisant ce code:Dyanamically ajouter RemoteViews dans une notification personnalisée en boucle, problème dans la mise pendingintent

RemoteViews remoteViews = new RemoteViews(this.getPackageName(), R.layout.custom_notification); 

    for (int i = 0; i < 100; i++) { 

     Intent mybuttonsIntent = new Intent(this, NotifyActivityHandler.class); 
     RemoteViews rv = new RemoteViews(this.getPackageName(), R.layout.button_layout); 
     Bundle b = new Bundle(); 
     b.putInt("abcd", i); 
     mybuttonsIntent.putExtras(b); 
     rv.setOnClickPendingIntent(R.id.button, PendingIntent.getActivity(this, 0, mybuttonsIntent, PendingIntent.FLAG_UPDATE_CURRENT)); 
     remoteViews.addView(R.id.rlMainNotification, rv); 
    } 
    Intent intent = new Intent(this, MainActivity.class); 
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    NotificationCompat.Builder builder = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setContentIntent(pIntent) 
      .setContent(remoteViews); 
    NotificationManager notificationmanager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationmanager.notify(0, builder.build()); 

Voici button_layout.xml:

<Button xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:id="@+id/button" 
android:layout_height="wrap_content" 
android:layout_weight="1" /> 

Dans NotifyActivityHandler, j'utilise ce code pour obtenir Int:

Bundle extras = getIntent().getExtras(); 
    if (extras != null) { 
     int level = extras.getInt("abcd"); 
      Toast.makeText(this, "testing" + level, Toast.LENGTH_LONG).show(); 

Mais le problème est que chaque bouton passe le même Int i.e 99 Si au lieu d'utiliser R.id.button j'utilise rv.getLayoutId() alors les boutons ne répondent pas. Je veux que chaque bouton passe la valeur qui lui est assignée dans la boucle for.

Edit: sur demande d'un intervenant, voici le xml de custom_notification

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:weightSum="10"> 

<LinearLayout 
    android:layout_weight="1" 
    android:layout_width="0dp" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:id="@+id/autoIcon" 
     android:tint="@color/themeColor" 
     android:layout_gravity="center" 
     android:scaleType="fitCenter" 
android:src="@drawable/ic_brightness_medium_white_48dp" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent"/> 
</LinearLayout> 

<LinearLayout 
    android:id="@+id/rlMainNotification" 
    android:layout_width="0dp" 
    android:gravity="center_vertical" 
    android:layout_gravity="center_vertical" 
    android:orientation="horizontal" 
    android:layout_height="match_parent" 
    android:paddingRight="4dp" 
    android:paddingLeft="2dp" 
    android:layout_weight="9" 
    > 

</LinearLayout> 

</LinearLayout> 
+0

Où rlMainNotification est-il défini? J'essaye d'accomplir la même chose, mais pas réussi. Cela vous dérangerait de poster la mise en page xml pour custom_notification ainsi –

+0

C'est une disposition linéaire dans custom_notification.xml – Usman

+1

J'ai également ajouté le xml comme demandé. – Usman

Répondre

1

changer cette ligne:

rv.setOnClickPendingIntent(R.id.button, PendingIntent.getActivity(this, 0, mybuttonsIntent, PendingIntent.FLAG_UPDATE_CURRENT)); 

à

rv.setOnClickPendingIntent(R.id.button, PendingIntent.getActivity(this, i, mybuttonsIntent, PendingIntent.FLAG_UPDATE_CURRENT)); 

changer fondamentalement 0 à i.

+0

Merci bro a travaillé :) – Usman