2011-07-31 8 views
10

Mi Widget inicia un Servicio y el Servicio Actualiza una Lista de 3 LinearLayouts.Multiple OnClick on Widget para el mismo Intento

quiero fijar en cada una LinearLayout SetOnClickPeningIntent con diferentes extra

Pero cuando inicio el widget y quiero hacer clic en los LinearLayouts sólo la última es onclickable =/I no sabe lo que está mal. Espero que puedas ayudarme.

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


for (int widgetId : appWidgetIds) { 


    int[] lls = { R.id.ll_con_1, R.id.ll_con_2, R.id.ll_con_3 }; 


     for (int i = 0; i < jray.length(); i++) { 

        try { 

         JSONObject o = jray.getJSONObject(i); 

         //Onclick 
          if(i == 0) 
          { 
           Intent msg_intent = new Intent(getApplicationContext(), MSGsOpenMsg.class); 
           msg_intent.putExtra("messageid", o.getString("id")); 
           PendingIntent msg_pendingIntent = PendingIntent.getActivity(
             getApplicationContext(), 0, msg_intent, Intent.FLAG_ACTIVITY_NEW_TASK); 
           remoteViews.setOnClickPendingIntent(R.id.ll_con_1, msg_pendingIntent); 
          } 
          else if(i == 1) 
          {   
           Intent msg_intent1 = new Intent(getApplicationContext(), MSGsOpenMsg.class); 
           msg_intent1.putExtra("messageid", o.getString("id")); 
           PendingIntent msg1_pendingIntent = PendingIntent.getActivity(
             getApplicationContext(), 0, msg_intent1, Intent.FLAG_ACTIVITY_NEW_TASK); 
           remoteViews.setOnClickPendingIntent(R.id.ll_con_2, msg1_pendingIntent); 
          } 
          else if(i == 2) 
          { 
           Intent msg_intent = new Intent(getApplicationContext(), MSGsOpenMsg.class); 
           msg_intent.putExtra("messageid", o.getString("id")); 
           PendingIntent msg2_pendingIntent = PendingIntent.getActivity(
             getApplicationContext(), 0, msg_intent, Intent.FLAG_ACTIVITY_NEW_TASK); 
           remoteViews.setOnClickPendingIntent(R.id.ll_con_3, msg2_pendingIntent); 
          } 

        } catch (JSONException e) { 

        } 
     } 

} 

Respuesta

22

Tuve este problema. Es porque Android intenta colapsar PendingIntents similares en 1 one y esto tiene algunas consecuencias realmente molestas. IE, los intentos más antiguos se descartan cuando son sutilmente diferentes. Creo que también hay un error en la forma en que colapsan, ya que no coincide con la documentación. (Me encontré con esto hace mucho tiempo, así que las cosas podrían haber cambiado.)

Básicamente, asegúrese de que el parámetrorequestCode en PendingIntent.getActivity es diferente para cada elemento de la interfaz de usuario. De esta forma, cada uno obtiene su propio PendingIntent y nunca colisionan.

Tengo un código aquí que trata de evitar el problema, pero es un poco derrochador. http://code.google.com/p/futonic-mylocationwidget/source/browse/src/com/futonredemption/mylocation/Intents.java#35

Voy a admitir la solución en mi código no es el mejor, pero parece que funciona bastante bien hasta ahora.

+0

Hehe ¡Gracias! Intenté esto antes, pero de otra manera, así que no funcionó. ¡Pero ahora funciona! acabo de establecer el requestCode en i. – Stefan

+0

Hehe. Si funciona, debe marcar la pregunta como respondida. Gracias por la respuesta. –

+0

¡Respuesta muy útil, gracias! Estuve luchando con esto por medio día. – JensJensen

Cuestiones relacionadas