I've home scrren widget, and I'm generating some items inside (i have a layout of this item) the widget and setting some listeners on them. It's very simple, just like this:
RemoteViews currentItem1 = new RemoteViews(context.getPackageName(), R.layout.complex_list_item);
updateViews.addView(R.id.panelNews, currentItem1);
Intent intent1 = new Intent(context, ForexWidget.class);
intent1.setAction(Constants.ACTION_PRESSED_ITEM);
PendingIntent pendingIntent1 = PendingIntent.getBroadcast(context, 0, intent1, 0);
updateViews.setOnClickPendingIntent(R.id.singleLine, pendingIntent1);
RemoteViews currentItem2 = new RemoteViews(context.getPackageName(), R.layout.complex_list_item);
updateViews.addView(R.id.panelNews, currentItem2);
Intent intent2 = new Intent(context, ForexWidget.class);
intent2.setAction(Constants.ACTION_PRESSED_ITEM);
PendingIntent pendingIntent2 = PendingIntent.getBroadcast(context, 0, intent2, 0);
updateViews.setOnClickPendingIntent(R.id.singleLine, pendingIntent2);
Items are created, added to the widget, it looks great, BUT listeners are not working the way I want - only the first listener for the first button works, others doesn't. I suppose its because I register setOnClickPendingIntent for both buttons with same id (R.id.singleLine) - but the biggest problem is, that i cant set id of button when its inside remoteview...
Is there some way to do thing like this? Thx a lot
EDIT: This is my layout item, i'm trying to generate.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/singleLine"
android:layout_width="fill_parent"
android:layout_height="34dp"
android:clickable="true"
android:orientation="vertical" >
<TextView
android:id="@+id/txtTime"
android:layout_width="45dp"
android:layout_height="wrap_content"
android:paddingRight="5dp"
android:textSize="@dimen/fontNewsCompact" />
<TextView
android:id="@+id/txtCurrency"
android:layout_width="30dp"
android:layout_height="wrap_content"
android:paddingRight="5dp"
android:textSize="@dimen/fontNewsExtraCompact" />
</LinearLayout>
The problem is that the action must be different for each intent, if you don't change it it will only take the first (or the last, depending on your flags).
What I have done in similar situations is give an additional unique identifier to the action such as:
intent1.setAction(Constants.ACTION_PRESSED_ITEM + "-1");
...
intent2.setAction(Constants.ACTION_PRESSED_ITEM + "-2");
Then on your ForexWidget class use something as:
if (intent.getAction().startsWith(Constants.ACTION_PRESSED_ITEM) {
// your logic here
}
Also, to add a pending intent to objects with the same Id, you should go to the deepest scope you can so that you enclose only one item with that Id. That way the intents should be added as follows:
currentItem1.setOnClickPendingIntent(R.id.singleLine, pendingIntent1)
...
currentItem2.setOnClickPendingIntent(R.id.singleLine, pendingIntent2)
this way you are on the scope of your list item layout