Skip to content Skip to sidebar Skip to footer

NotifyDataSetChanged Not Working While Retrieving SQLite Data

Declaring private List messages = new ArrayList<>(); privare MessagesAdapter mAdapter; private RecyclerView messageList; Initialising messageList = (Recy

Solution 1:

You are fetching the data in activity but not passing the new data to Recyclerview adapter, notifyAdapter works when the list of adapter is updated. In your case, you can create a method in adapter to get the new message, which you will call everytime new message is added and notify adapter there.

Update below code:

 while (csr.moveToNext()) {
    String mSender = csr.getString(csr.getColumnIndex(KEY_SENDER));
    String mMessage = csr.getString(csr.getColumnIndex(KEY_MESSAGE));
    String mTime = csr.getString(csr.getColumnIndex(KEY_TIME));
    String mSeen = csr.getString(csr.getColumnIndex(KEY_SEEN));
    String mTimer = csr.getString(csr.getColumnIndex(KEY_TIMER));
    String mType = csr.getString(csr.getColumnIndex(KEY_TYPE));

    messages.add(new SQLiteHelper(mSender, mMessage, mTime, mSeen, mTimer, mType));
    //mAdapter.notifyDataSetChanged();
    mAdapter.updateData(messages);
}

in your adapter class:

void updateData(List<SQLiteHelper> pMessages){
    if(pMessages== null || pMessages.size()==0)
           return;
    if (pMessages!= null && pMessages.size()>0) 
           this.messages.clear();  
    this.messages.addAll(pMessages);
        notifyDataSetChanged();    
     }

Hope it helps


Solution 2:

First update your list with data, then use notifyItemRangeInserted outside while loop as in

while (csr.moveToNext()) {
        String mSender = csr.getString(csr.getColumnIndex(KEY_SENDER));
        String mMessage = csr.getString(csr.getColumnIndex(KEY_MESSAGE));
        String mTime = csr.getString(csr.getColumnIndex(KEY_TIME));
        String mSeen = csr.getString(csr.getColumnIndex(KEY_SEEN));
        String mTimer = csr.getString(csr.getColumnIndex(KEY_TIMER));
        String mType = csr.getString(csr.getColumnIndex(KEY_TYPE));

        messages.add(new SQLiteHelper(mSender, mMessage, mTime, mSeen, mTimer, mType));
    }
    mAdapter.notifyItemRangeInserted(0,messages.size());

Post a Comment for "NotifyDataSetChanged Not Working While Retrieving SQLite Data"