2011-07-31 7 views
10

Benim Widget'ım bir Servis ve Service Update 3 LinearLayouts Listesini başlatır.Aynı Amaç için Çoklu OnClick on Widget

farklı Ekstra

her LinearLayout bir SetOnClickPeningIntent ayarlamak istediğiniz Ama widget'ı başlangıç ​​ve LinearLayouts tıklayın istediğinizde sadece sonuncusu onclickable olduğunu =/Sorun ne bilmiyorum. Umarım bana yardım edebilirsin.

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

        } 
     } 

} 

cevap

22

Bu sorunu yaşadım. Bunun nedeni Android'in benzer PendingIntents'ı 1'e daraltmaya çalışmasıdır ve bunun bazı can sıkıcı sonuçları vardır. IE, büyük ölçüde farklı olduklarında eski niyetleri bırakılır. Belgelerin eşleşmediği için, daraltma konusunda da bir hata olduğunu düşünüyorum. (Işler değişmiş olabilir bu yüzden uzun zaman önce bu karşılaştım.)

Temelde ben PendingIntent.getActivity içinde requestCode parametre her UI öğesi için farklı olduğundan emin olun. Bu şekilde her biri kendi PendingIntent'lerini alır ve asla çarpışmaz.

Buradaki problemi çözmeyi deneyen bir kodum var ama biraz da israf ediyor. http://code.google.com/p/futonic-mylocationwidget/source/browse/src/com/futonredemption/mylocation/Intents.java#35

Kodumdaki çözümün en iyisi olmadığını kabul edeceğim ama şu ana kadar gayet iyi çalışıyor gibi görünüyor.

+0

Hehe Teşekkürler! Bunu daha önce denedim ama biraz daha başka bir şekilde işe yaramadı. Ama şimdi çalışıyor! Sadece requestCode'u ben ayarlıyorum. – Stefan

+0

Hehe. Eğer çalışırsa, soruyu cevaplandı olarak işaretlemelisiniz. Geri dönüşünüz için teşekkür ederiz. –

+0

Çok faydalı cevap, teşekkürler! Yarım gün bununla uğraşıyordum. – JensJensen