我想在接收FCM通知时(如果打开了特定的片段)刷新片段中的回收者视图,否则接收通知。
我尝试了多种解决方案,但这没有用。
MyFirebaseMessagingService.java
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Map<String, String> data = remoteMessage.getData();
if (remoteMessage.getNotification() != null) {
String noti_body = remoteMessage.getNotification().getBody();
String noti_title = remoteMessage.getNotification().getTitle();
String noti_activity = data.get("activity");
mBuilder = new NotificationCompat.Builder(this, "M_CH_ID")
.setSmallIcon(R.mipmap.logo)
.setContentTitle(noti_title)
.setContentText(noti_body)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.logo))
.setColor(getResources().getColor(R.color.colorAccent))
.setDefaults(Notification.DEFAULT_ALL)
.setPriority(NotificationManager.IMPORTANCE_HIGH)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setAutoCancel(true); // clear notification after click
if (remoteMessage.getData().size() > 0) {
fragmentNewJobs c = new fragmentNewJobs();
if (c.getUserVisibleHint()) {//fragmentNewJobs.is_open
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("activity", noti_activity);
getApplicationContext().startActivity(intent);
}else {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("activity", noti_activity);
@SuppressLint("WrongConstant")
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
mBuilder.setContentIntent(pi);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(0, mBuilder.build());
}
}
}
}
fragmentNewJobs c =新的fragmentNewJobs(); 如果(c.getUserVisibleHint())
我已经尝试过,但是即使我打开了任何屏幕,它也会加载fragmentNewJobs.java
。
仅当recyclerView
打开时,我才想刷新fragmentNewJobs.java
中的fragmentNewJobs
,否则会收到通知。
recyclerView
添加新项目(如果可能,不加载所有数据)答案 0 :(得分:1)
我只想向回收者视图添加新项目(如果不加载所有数据, 可能)
仅在以下情况下,我想刷新fragmentNewJobs.java中的recyclerview: fragmentNewJobs已打开,否则会收到通知。
为此,您可以在Application类中使用静态布尔值,并将其在Fragment的onResume()
上设置为true,在onPause()
上设置为false。
然后您可以通过ApplicationClass.isFragmentVisible()
修改
您可以在fragmentVisible
的{{1}}内更改setUserVisibleHint()
布尔值,这将非常有效。您最初需要将Fragment
设置为假,因为它是真实的默认设置。选中this answer,以更好地理解。
答案 1 :(得分:1)