Нужно чтобы при нажатии на оповещение с определенным текстом открывалась определенная вкладка viewPager, но как это реализовать?
private void showNotification(String title, String body) {
int a = new Random().nextInt();
array.add(a);
resultIntent = new Intent(this, MyFragment.class);
int b = Integer.parseInt(page.replaceAll("[\\D]", ""));
resultPendingIntent = PendingIntent.getActivity(this, 1, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(title)
.setContentText(body)
.setContentIntent(resultPendingIntent);
notification = builder.build();
notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(a, notification);
list.add(b+":"+a);
System.out.println("Notification "+list);
}
Нужно добавить action:
private void showNotification(String title, String body) { int a = new Random().nextInt();
array.add(a);
resultIntent = new Intent(this, MyFragment.class);
int b = Integer.parseInt(page.replaceAll("[\\D]", ""));
resultPendingIntent = PendingIntent.getActivity(this, 1, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(title)
.setContentText(body)
.setContentIntent(resultPendingIntent);
builder.addAction(
R.drawable.ic_icon,
"open",
PendingIntent.getActivity(
context,
requestCode,
Intent(this, YourActivity.class).putExtra(YourEnum.PAGE_STRING.getName(), yourPage),
PendingIntent.FLAG_UPDATE_CURRENT
)
)
notification = builder.build();
notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(a, notification);
list.add(b+":"+a);
System.out.println("Notification "+list);
}
Идея следующего характера, вы в нотификашку добавляете PendingIntent, в него добавляете интент с вашей активностью и добавляете ту страницу, которую необходимо открыть, а в активности ловите данный интент, и открываете нужную страницу. Создаёте слушателя и через него устанавливаете нужную страницу. Внимание, там есть три разных слушателя, зависит от версии ViewPager:
val listener = object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
override fun onPageScrolled(
position: Int,
positionOffset: Float,
positionOffsetPixels: Int
) {
}
override fun onPageSelected(position: Int) {
)
}
}
}
onCreate {
val page = intent.getStringExtra(YourEnum.PAGE_STRING.getName())
viewPager.setOnPageChangeListener(viewPagerListener)
//после настройки и установки адаптера (тоесть добавления данных в адаптер) и вызова adapter.notifyDataSetChanged(), если после изменения адаптера не вызовете и будете устанавливать страницу, получите креш
listener.onPageSelected(page) //учитывайте что страницы идут с нуля, если выше не учтено, используйте page-1. Установку страницы я например делаю в коллбеке, который добавляет данные в адаптер
}
P.S. Ссори, давно не делал на джаве, потому Котлин. Тут ничего нет страшного, разберётесь
Это не совсем то, что Вам надо, но все же, оставлю, вдруг надо будет потом. При нажатии на оповещение открывается приложение, а точнее MainActivity. Можно вписать этот код в начальный класс
if (intent.extras != null) {
for (id in intent.extras!!.keySet()) {
val id_value = intent.extras!!.get(id)
if (id.equals("id")) {
val intent = Intent(applicationContext, CurrentNews::class.java)
intent.putExtra("id", id_value.toString())
startActivity(intent)
}
}
}
Вы отправляете оповещение с текстом news и id конкретной новости, к примеру. При нажатии по оповещению открывается приложение. Получаем news + id и открываем конкретную активити. Можно создать новую активити (такую же, как фрагмент, который Вам нужен), и при запуске заполнить его данными. Или же вставить в него фрагмент, который во ViewPager.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском