2016-05-21 2 views
1

Я хочу выделить ListItem при нажатии на уведомление. Моя активность, которая отображает ListView, уже открыта, поэтому я не могу открыть ее снова при нажатии уведомления. Я много искал, но я думаю, что для уведомления не существует метода onClick(). Поэтому, пожалуйста, расскажите, как я могу это сделать?onClick() прослушиватель для уведомления

Это, как я генерации уведомление о

Intent intent = new Intent(); 
PendingIntent pIntent = PendingIntent.getActivity(context, notification_id, intent, 0); 
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context); 
mBuilder.setTicker("Smart Locator"); 
mBuilder.setSmallIcon(R.drawable.notification_icon); 
mBuilder.setContentTitle(name); 
DetailsContainer dc = new LocationDetails(context).getDetails(location); 
mBuilder.setContentText(date + ", " + dc.area + " " + dc.locality); 
mBuilder.setContentIntent(pIntent).getNotification(); 
mBuilder.setAutoCancel(true); 
mBuilder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL; 
Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
mBuilder.setSound(alarmSound); 
NotificationManager mNotificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
mNotificationManager.notify(document_id, notification_id, mBuilder.build()); 
+0

Я думаю, щелкнув уведомление создает Намерение, которое вы можете указать в манифесте которая может справиться с этим. Оттуда вам понадобятся некоторые данные, чтобы узнать тип уведомления, которое вы нажали, и позицию данных ListView, которую вы хотели выбрать. –

+0

Возможный дубликат [Как установить прослушиватель уведомлений для уведомления?] (Http://stackoverflow.com/ вопросы/7184963/how-to-set-click-listener-for-notification) –

ответ

3

Вы можете поставить дополнительный в вашем ожидании намерения.

final Intent intent = new Intent(this, MyActivity.class); 
intent.setData(data); 
intent.putExtra("key", "clicked"); 
final PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent), 0); 

Затем, когда ваша деятельность перезапускается, вы можете проверить, было ли нажато уведомление, через полученный пакет.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    processIntent(getIntent()); 
} 

@Override 
protected void onNewIntent(Intent intent) {  
    processIntent(intent); 
}; 

private void processIntent(Intent intent){ 
    //get your extras 
    //if clicked, do something with ListView 
} 

Проверьте, пожалуйста, this question.

+1

Пожалуйста, не копируйте ответы из других источников –

+0

Я не копирую ответ, я дал логику, чтобы проверить щелчок на уведомление, я даже поставил источник кода. –

+0

Несомненно. Я имел в виду, как только вы получите больше репутации, вы можете отметить вопрос как дубликат. –

0

Положите статист в вашем ожидании намерения:

final Intent intent = new Intent(this, MyActivity.class); 
intent.setData(data); 
intent.putExtra("NotClick", true); 
final PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent), 0); 

И используйте следующий код в вашей деятельности:

@Override 
protected void onNewIntent(Intent intent) { 
    try { 
     //on click notification 
     Bundle extras = intent.getExtras(); 
     if (extras.getBoolean("NotClick")) { 
      //Do your stuff here 
     } 
    } catch (Exception e) { 
     Log.e("onclick", "Exception onclick" + e); 
    } 
}