通过调用 BroadCastReceiver 更新 RecyclerView
Update RecyclerView with call BroadCastReceiver
我的片段中有一个回收站视图,每次在广播接收器中出现推送消息时,我都想更新我的回收站视图。我的问题是当接收器调用时,它用以前的项目替换新项目,但我想创建新行和以前的项目仍然存在。我搜索了很多但没有成功。这是我的片段,里面有广播接收器
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View drawer = inflater.inflate(R.layout.fragment_notif_list, container, false);
rv = (RecyclerView) drawer.findViewById(R.id.recyclerview);
rv.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(getActivity());
rv.setLayoutManager(mLayoutManager);
prefs = getActivity().getSharedPreferences(Config.SHARED_PREF_NAME, Context.MODE_PRIVATE);
mRegistrationBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Config.PUSH_NOTIFICATION)) {
// new push notification is received
Toast.makeText(getActivity(), "Push notification is received!", Toast.LENGTH_LONG).show();
message = intent.getStringExtra("message");
title = intent.getStringExtra("title");
timestamp = intent.getStringExtra("timestamp");
Log.d("message -->", message);
Log.d("title -->", title);
Log.d("time -->", timestamp);
MessageObj messageObj = new MessageObj(message,title,timestamp);
getDataSet(messageObj.getMessage(),messageObj.getTitle(),messageObj.getDate());
}
}
};
return drawer;
}
private void getDataSet(String message,String title,String date) {
ArrayList results = new ArrayList<MessageObj>();
MessageObj obj = new MessageObj(message,title,date);
Log.d("result size :",results.size()+"");
results.add(results.size(),obj);
mAdapter = new MessageAdapter(getActivity(), results);
rv.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
}
这是因为每次接收广播时,您都在创建一个新的 results
ArrayList 和新的 Adapter。一旦超出广播接收器的范围,您就需要创建数组列表和适配器。然后在收到广播时简单地添加到数组列表中。然后在你的适配器上调用 notifyDataSetChanged 让它更新 UI.
我的片段中有一个回收站视图,每次在广播接收器中出现推送消息时,我都想更新我的回收站视图。我的问题是当接收器调用时,它用以前的项目替换新项目,但我想创建新行和以前的项目仍然存在。我搜索了很多但没有成功。这是我的片段,里面有广播接收器
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View drawer = inflater.inflate(R.layout.fragment_notif_list, container, false);
rv = (RecyclerView) drawer.findViewById(R.id.recyclerview);
rv.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(getActivity());
rv.setLayoutManager(mLayoutManager);
prefs = getActivity().getSharedPreferences(Config.SHARED_PREF_NAME, Context.MODE_PRIVATE);
mRegistrationBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Config.PUSH_NOTIFICATION)) {
// new push notification is received
Toast.makeText(getActivity(), "Push notification is received!", Toast.LENGTH_LONG).show();
message = intent.getStringExtra("message");
title = intent.getStringExtra("title");
timestamp = intent.getStringExtra("timestamp");
Log.d("message -->", message);
Log.d("title -->", title);
Log.d("time -->", timestamp);
MessageObj messageObj = new MessageObj(message,title,timestamp);
getDataSet(messageObj.getMessage(),messageObj.getTitle(),messageObj.getDate());
}
}
};
return drawer;
}
private void getDataSet(String message,String title,String date) {
ArrayList results = new ArrayList<MessageObj>();
MessageObj obj = new MessageObj(message,title,date);
Log.d("result size :",results.size()+"");
results.add(results.size(),obj);
mAdapter = new MessageAdapter(getActivity(), results);
rv.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
}
这是因为每次接收广播时,您都在创建一个新的 results
ArrayList 和新的 Adapter。一旦超出广播接收器的范围,您就需要创建数组列表和适配器。然后在收到广播时简单地添加到数组列表中。然后在你的适配器上调用 notifyDataSetChanged 让它更新 UI.