Dan*_*Kim 7 animation android listener android-adapter android-recyclerview
出于某种原因,在向RecyclerView添加新项目时(应插入列表顶部),除非我向下滚动列表并返回到顶部,并且没有任何动画,否则它将不会显示.(只是出现在列表的顶部,好像它一直存在).使用正确的动画删除项目可以正常工作.
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);
}
Run Code Online (Sandbox Code Playgroud)
SQLite数据库:
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;
}
Run Code Online (Sandbox Code Playgroud)
监听器:
public interface OnDatabaseChangedListener{
void onNewDatabaseEntryAdded();
void onDatabaseEntryRenamed();
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我应该提一下,如果我使用NotifyDataSetChanged而不是NotifyItemInserted,那么新项目会立即显示,但RecyclerView不会滚动到列表的顶部.(手动必须向上滚动才能看到它).
yig*_*git 17
发生这种情况是因为LinearLayoutManager认为该项目是插入第一项之上的.当您不在列表的顶部时,此行为是有意义的,但我知道当您位于列表顶部时,它是不直观的.我们可能会改变这种行为,同时,linearLayoutManager.scrollToPosition(0)如果linearLayoutManager.findFirstCompletelyVisibleItemPosition()返回0 ,你可以在插入项目后调用.
| 归档时间: |
|
| 查看次数: |
4877 次 |
| 最近记录: |