Несколько OnClick на виджет для одного и того же намерения - PullRequest
10 голосов
/ 31 июля 2011

Мой виджет запускает службу, а служба обновляет список из 3 LinearLayouts.

Я хочу установить для каждого LinearLayout SetOnClickPeningIntent с разными Extra

Но когда я запускаю виджет и хочучтобы щелкнуть на 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) {

                    }
        }

}

1 Ответ

22 голосов
/ 31 июля 2011

У меня была эта проблема. Это потому, что Android пытается свернуть аналог PendingIntents в один, и это имеет некоторые действительно раздражающие последствия. То есть старые намерения отбрасываются, когда они немного отличаются. Я думаю, что есть также ошибка в том, как они разрушаются, так как это не соответствует документации. (Я столкнулся с этим давным-давно, чтобы все могло измениться.)

По сути, я уверен, что параметр requestCode в PendingIntent.getActivity отличается для каждого элемента пользовательского интерфейса. Таким образом, каждый из них получает свой PendingIntent и никогда не сталкивается.

У меня есть код, который пытается обойти проблему, но это немного расточительно. http://code.google.com/p/futonic-mylocationwidget/source/browse/src/com/futonredemption/mylocation/Intents.java#35

Я признаю, что решение в моем коде не самое лучшее, но, похоже, оно пока работает довольно хорошо.

...