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(); 


} 

答えて

3

それはあるに放送受信機を持っている私の断片です。アレイリストとアダプターは、ブロードキャスト受信機の範囲外に作成する必要があります。次に、ブロードキャストを受け取ったときに配列リストに追加するだけです。その後、アダプタでnotifyDataSetChangedと呼んでUIを更新します。

+0

あなたは私の人生を保存しました、ありがとう;) – hdiz

+0

もう1つ質問ありがとうございます。もし私がすべてのアイテムを削除するアプリケーションを削除する方法は、それらを保存することができますか?私はsharedpreferenceを使うべきですか? – hdiz

+0

データを優先して保存するのは悪い習慣です。データの取得は遅く、インデックスが作成されないので、データをデータベースに格納するのがよいでしょう。 –

関連する問題