0
私は自分のフラグメントにリサイクラビューを持っています。ブロードキャストレシーバでプッシュメッセージが発生するたびにリサイクラビューを更新したいのですが、私の問題は受信者コールで前のアイテム新しい行を作成し、以前の項目はまだ存在します。私は多くを検索しましたが、成功しませんでした。ここでは、新しいresults
のArrayListや新しいアダプタあなたが放送を受信するたびに作成しているので、それがRecyclerViewを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();
}
あなたは私の人生を保存しました、ありがとう;) – hdiz
もう1つ質問ありがとうございます。もし私がすべてのアイテムを削除するアプリケーションを削除する方法は、それらを保存することができますか?私はsharedpreferenceを使うべきですか? – hdiz
データを優先して保存するのは悪い習慣です。データの取得は遅く、インデックスが作成されないので、データをデータベースに格納するのがよいでしょう。 –