针对同一Intent的多个OnClick on Widget

时间:2011-07-31 19:03:30

标签: android widget android-pendingintent

My Widget启动服务,服务更新3个LinearLayouts列表。

我想在每个LinearLayout上设置一个具有不同Extra

的SetOnClickPeningIntent

但是当我启动小部件并且想要点击LinearLayouts时,只有最后一个是onclickable = /我不知道什么是错的。希望你能帮帮我。

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

                    }
        }

}

1 个答案:

答案 0 :(得分:22)

我遇到了这个问题。这是因为Android试图将类似的PendingIntents崩溃为1,这有一些非常令人讨厌的后果。 IE中较旧的意图在它们略有不同时被删除。我认为它们如何崩溃也存在一个错误,因为它与文档不匹配。 (我很久以前遇到过这种情况,所以事情本来可以改变。)

基本上,我确保每个UI项目PendingIntent.getActivity中的 requestCode 参数不同。这样他们每个人都有自己的PendingIntent,永远不会碰撞。

我这里有代码试图解决问题,但这有点浪费。 http://code.google.com/p/futonic-mylocationwidget/source/browse/src/com/futonredemption/mylocation/Intents.java#35

我会承认我的代码中的解决方案并不是最好的,但到目前为止似乎运行良好。