2012-05-24 3 views
0

оказывает виджет элементов в цикле после нажатия я хочу начать DetailsActivity (он должен отправить идентификатор этой деятельности)Android - отправка статистов через PendingIntent

Cursor currentCursor = dbHelper.getWidgetCursor(); 
for(int k=0; k < currentCursor.getCount(); k++){ 
    currentCursor.moveToPosition(k); 

    RemoteViews rw = new RemoteViews(context.getPackageName(), R.layout.w_calendar_item); 

    Intent intentRow = new Intent(context, DetailsActivity.class); 
    Log.v("a", "index: "+currentCursor.getInt(currentCursor.getColumnIndex(SqlHelper.COLUMN_ID))); 
    intentRow.putExtra("index", currentCursor.getInt(currentCursor.getColumnIndex(SqlHelper.COLUMN_ID))); 
    PendingIntent pendingIntentRow = PendingIntent.getActivity(context, 1, intentRow, PendingIntent.FLAG_CANCEL_CURRENT); 
    rw.setOnClickPendingIntent(R.id.w_li, pendingIntentRow); 

    views.addView(R.id.w_list, rw); 
} 

Моей проблема заключается в том, что DetailsActivity всегда получает индекс 103 (который последнее в списке) не имеет значения, какой пункт я нажимаю

+0

Это потому, что вы * отменяете * предыдущее ожидающее намерения снова и снова. Подумайте о создании чего-то «уникального» в 'intentRow' - например. поддельный 'Uri', переданный' Intent # setData (Uri) 'будет делать трюк - используйте инкрементный путь или какую-то глупость. – Jens

ответ

0

Это потому, что вы установили флаг PendingIntent.FLAG_CANCEL_CURRENT в PendingIntent.getActivity. Для каждой строки Android отменяет предыдущие ожидающие намерения, поэтому, естественно, последний будет «выживать». Возможно, это работает, просто удалив этот флаг? У меня нет опыта работы с RemoteViews, поэтому не уверен, что лучше всего делать, если это не помогает.

Смежные вопросы