2011-07-31 12 views
10

私のウィジェットはサービスを開始し、サービスは3つのLinearLayoutsのリストを更新します。複数のOnClick同じインテントのウィジェット

私は別のエクストラ

でそれぞれのLinearLayoutにSetOnClickPeningIntentを設定したいが、私はウィジェットを開始し、最後のものだけがonclickableあるLinearLayoutsをクリックしたときに= /私が間違って何を知りません。あなたが私を助けてくれることを願います。

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

        } 
     } 

} 

答えて

22

私はこの問題を抱えていました。 Androidは同様のPendingIntentsを1つに縮小しようとしているため、これは本当に面倒な結果を招いているからです。彼らが微妙に異なるとき、古い意図は落とされます。ドキュメントには一致しないので、崩壊する方法にもバグがあると思います。 (私は物事が変更されていることができるように長い時間前にこれに走った。)

基本的に私はPendingIntent.getActivityrequestCodeパラメータは、各UI項目に異なっていることを確認してください。そうすれば、彼らはそれぞれ独自のPendingIntentを取得し、衝突することはありません。

ここに問題を回避しようとするコードがありますが、少し無駄です。 http://code.google.com/p/futonic-mylocationwidget/source/browse/src/com/futonredemption/mylocation/Intents.java#35

私のコードでの解決策は最高ではないと認めますが、これまでのところうまく機能しているようです。

+0

Heheありがとう!私は前にこれを試しましたが、ちょっと違う方法で試してみました。しかし、今それは動作します!私はただrequestCodeをiに設定しました。 – Stefan

+0

Hehe。それが機能している場合は、質問に回答としてマークする必要があります。フィードバックをお寄せいただきありがとうございます。 –

+0

非常に有用な答え、ありがとう!私は半日でこれと闘っていた。 – JensJensen