目前,我能够显示,推送通知并能够在Recycler View上显示。但是,每当我关闭应用程序并重新打开时,推送通知都将消失。
我读到使用SharedPreferences会保存,但它不会保存我的通知,我真的不知道如何将其实现到我的代码中。我希望在打开应用程序时显示通知。
我刚刚遇到的另一个问题是,我发送的每个新推送通知都会替换旧的通知。例如,如果我发送通知消息“test”和第二个通知消息“test2”,test2将覆盖测试。我能够成功显示所有通知,但在实现SharedPreferences后,我得到了覆盖的值。
NotificationFragment.java
public class NotificationFragment extends Fragment {
private TextView test;
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private List<Notification> notificationList;
private BroadcastReceiver activityReceiver;
private String MyPREFERENCES = "test";
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_notification, container, false);
mRecyclerView = (RecyclerView) v.findViewById(R.id.notificationRecyclerview);
notificationList = new ArrayList<>();
mAdapter = new NotificationAdapter(getContext(), notificationList);
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(mLayoutManager);
activityReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getBundleExtra("msg");
String body = bundle.getString("msgBody");
SharedPreferences sharedpreferences = getContext().getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString("notification", body);
editor.apply();
Log.d("body", body);
Notification obj = new Notification(body);
prepareNotification(obj.getBody());
}
};
if (activityReceiver != null) {
IntentFilter intentFilter = new IntentFilter("ACTION_STRING_ACTIVITY");
getActivity().registerReceiver(activityReceiver, intentFilter);
}
return v;
}
private void prepareNotification(String body){
Notification obj = new Notification(body);
notificationList.add(obj);
mAdapter = new NotificationAdapter(getContext(), notificationList);
mRecyclerView.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
}
}
NotificationAdapter.java
public class NotificationAdapter extends RecyclerView.Adapter<NotificationAdapter.NotificationHolder> {
private List<Notification> notificationList;
private Context mContext;
private String MyPREFERENCES = "test";
public SharedPreferences prefs;
public NotificationAdapter(Context mContext, List<Notification> notificationList) {
this.mContext = mContext;
this.notificationList = notificationList;
prefs = mContext.getSharedPreferences(MyPREFERENCES, MODE_PRIVATE);
}
@Override
public NotificationHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View inflatedView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item_notification, parent, false);
return new NotificationHolder(inflatedView);
}
@Override
public void onBindViewHolder(final NotificationHolder holder, int position) {
Notification notification = notificationList.get(position);
// String restoredText = prefs.getString("text", null);
// holder.body.setText("Notification Message" + notification.getBody());
holder.body.setText("Notification Message: " + prefs.getString("notification", "No notifcation"));
}
@Override
public int getItemCount() {
return notificationList.size();
}
public class NotificationHolder extends RecyclerView.ViewHolder {
public TextView body;
public NotificationHolder(View view) {
super(view);
body = (TextView) view.findViewById(R.id.bodyMsg);
}
}
}