2016-04-18 27 views
1

Я создаю пользовательские уведомления и добавление кнопки динамически с помощью этого кода:Dyanamically добавления RemoteViews в пользовательских уведомления в течение цикла, проблемы в настройке 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()); 

Вот 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" /> 

В NotifyActivityHandler я использую этот код для получения Int:

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

Но проблема в том, что каждая кнопка пропускает тот же Int i.e 99 Если вместо использования R.id.button я использую rv.getLayoutId(), то кнопки не отвечают. Я хочу, чтобы каждая кнопка передавала значение, присвоенное ему, соответственно, в цикле for.

Edit: по просьбе комментатора, вот XML из 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

Где указано rlMainNotification ?. Я пытаюсь выполнить подобную вещь, но не удался. Не могли бы вы разместить раскладку xml для custom_notification, а также –

+0

Это линейный макет в custom_notification.xml – Usman

+1

Я также добавил xml по вашему запросу. – Usman

ответ

1

изменить эту строку:

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

в основном изменить от 0 до I.

+0

Спасибо, что это сработало :) – Usman