Aus irgendeinem Grund, wenn ein neues Element zum RecyclerView hinzugefügt wird (sollte an den Anfang der Liste eingefügt werden), wird es nicht angezeigt, es sei denn, ich scrolle die Liste hinunter und zurück zum oben und ohne jegliche Animation. (Erscheint ganz oben in der Liste, als wäre es die ganze Zeit dort). Das Entfernen eines Objekts funktioniert mit den richtigen Animationen.RecyclerView - Keine Animation auf NotifyItemInsert
RecyclerViewAdapter:
@Override
public void onNewDatabaseEntryAdded() {
//item added to top of the list
notifyItemInserted(0);
}
public FileViewerAdapter(Context context) {
super();
mContext = context;
mDatabase = new DBHelper(mContext);
mDatabase.setOnDatabaseChangedListener(this);
}
SQLite Datenbank:
private static OnDatabaseChangedListener mOnDatabaseChangedListener;
public static void setOnDatabaseChangedListener(OnDatabaseChangedListener listener) {
mOnDatabaseChangedListener = listener;
}
public long addRecording(String recordingName, String filePath, long length) {
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(DBHelperItem.COLUMN_NAME_RECORDING_NAME, recordingName);
cv.put(DBHelperItem.COLUMN_NAME_RECORDING_FILE_PATH, filePath);
cv.put(DBHelperItem.COLUMN_NAME_RECORDING_LENGTH, length);
cv.put(DBHelperItem.COLUMN_NAME_TIME_ADDED, System.currentTimeMillis());
long rowId = db.insert(DBHelperItem.TABLE_NAME, null, cv);
if (mOnDatabaseChangedListener != null) {
mOnDatabaseChangedListener.onNewDatabaseEntryAdded();
}
return rowId;
}
Zuhörer:
public interface OnDatabaseChangedListener{
void onNewDatabaseEntryAdded();
void onDatabaseEntryRenamed();
}
edit:
Ich sollte erwähnen, dass, wenn ich stattdessen NotifyDataSetChanged verwenden von NotifyItemInserted, dann wird das neue Element sofort angezeigt, aber der RecyclerView wird nicht zum Anfang der Liste blättern. (Manuell nach oben scrollen, um es zu sehen).
Ich addRecording aus dem Inneren einer Service-Rufnummer (nach MediaRecorder Audio-Video aufgenommen wurde), so bin ich der Art und Weise nicht sicher, ob ich lm.scrollToPosition aus dem Fragment nennen würde:/ –
i tatsächlich hab diesen Teil oben! Das Problem ist, ich habe setReverseLayout (true) und setStackFromEnd (true) beim Erstellen der RecyclerView, also Aufruf von lm.scrollToPosition (0) bringt mich auf der Unterseite der Ansicht .. eine Möglichkeit, das zu beheben? Vielleicht ist dies auch der Grund, warum notifyItemInserted (0) nicht animiert? NotifyItemRemoved (position) funktioniert jedoch einwandfrei .. und der RecyclerView.ViewHolder zeigt die oberste Position korrekt an, wenn Sie auf ein Objekt klicken. –
edit: Habe es geschafft, indem ich die Position auf getItemCount() - 1 setze, seltsamerweise .. immer noch nicht animiert:/ (sorry für kontinuierliche Kommentare, stackoverflow erlaubt mir nicht zu bearbeiten) –