У меня есть 1 ArrayList и 1 RecyclerView. Данные из БД извлекаются и сохраняются в ArrayList для отображения в RecyclerView. Все отлично работает с добавлением нового элемента в RecyclerView, но без добавления анимации. Я знаю, что я должен использовать notifyItemInserted для добавления анимации, но это не сработало. Не появлялась анимация вставки. Теперь мне нужно вернуться на предыдущую страницу, а затем снова вернуться на страницу, чтобы отображался добавленный элемент. Итак, как добавить обратно вставку анимации?NotifyItemInserted RecyclierView не работает с arrayList
Любая помощь будет очень оценена. Благодарю.
Код для передачи данных и установить адаптер:
db = new DatabaseHelper(this);
dbList = new ArrayList<>();
dbList = db.getFilteredItems();
RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
mRecyclerView.setHasFixedSize(true);
LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
//newest to oldest order (database stores from oldest to newest)
llm.setReverseLayout(true);
llm.setStackFromEnd(true);
mRecyclerView.setLayoutManager(llm);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
adapter = new RecyclerAdapter(this, llm, dbList);
mRecyclerView.setAdapter(adapter);
код для извлечения данных из БД:
//retrieve filtered data from DB
public List<AudioItem> getFilteredItems(){
List<AudioItem> audioList = new ArrayList<>();
String titleName = EditActivity.titleName;
String query = "select * from " + TABLE_NAME + " where " + COLUMN_NAME_RECORDING_NAME + " like '" + titleName + "%'";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query,null);
if (cursor.moveToFirst()){
do {
AudioItem audio = new AudioItem();
audio.setId(Integer.parseInt(cursor.getString(0)));
audio.setName(cursor.getString(1));
audio.setFilePath(cursor.getString(2));
audio.setLength(Integer.parseInt(cursor.getString(3)));
audio.setTime(Long.parseLong(cursor.getString(4)));
audioList.add(audio);
}while (cursor.moveToNext());
cursor.close();
}
return audioList;
}
Код для вставки данных в БД:
/* Insert data into database */
public void addRecording(String recordingName, String filePath, long length) {
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COLUMN_NAME_RECORDING_NAME, recordingName);
cv.put(COLUMN_NAME_RECORDING_FILE_PATH, filePath);
cv.put(COLUMN_NAME_RECORDING_LENGTH, length);
cv.put(COLUMN_NAME_TIME_ADDED, System.currentTimeMillis());
db.insert(TABLE_NAME, null, cv);
db.close();
if (mOnDatabaseChangedListener != null) {
mOnDatabaseChangedListener.onNewDatabaseEntryAdded();
}
}
Код для вызова анимации вставки:
@Override
public void onNewDatabaseEntryAdded() {
//item added to top of the list
Log.e("Count: ", Integer.toString(getItemCount()));
// notifyDataSetChanged();
notifyItemInserted(getItemCount());
//llm.scrollToPosition(getItemCount() - 1);
}
Некоторые коды помогут нам помочь. – nukeforum
Добавлены фрагменты кода nukeforum. Спасибо –
@KenWong, почему вы используете 2 arraylist, когда вы можете сделать это с помощью одного arraylist, вы можете передать имя title как параметр в методе getDataFromDB, а затем, выполнив такой же запрос, вы можете получить данные и вернуть их – Vickyexpert