我有一个RecyclerView,我想在它的顶部添加新项目,但我不希望RecyclerView滚动其内容。我希望用户在添加新项目之前查看与相同的项目。
我试过这个但是效果不好:
index = ((LinearLayoutManager)mLayoutManager).findFirstVisibleItemPosition() + response.items.size();
View v = ((RecyclerView)mListView).getChildAt(0);
top = (v == null) ? 0 : v.getTop();
// Insert new datas..
...
// Notify my adapter
myAdapter.notifyDataSetChanged();
// Stay on the same previous position
((LinearLayoutManager)mLayoutManager).scrollToPositionWithOffset(index, top);
我想要做的是在用户滚动到顶部时加载旧评论(如在Instagram应用程序上)。
非常感谢你们!
答案 0 :(得分:0)
您可以使用var gulp = require('gulp');
var uglify = require('gulp-uglify');
var sass = require('gulp-ruby-sass');
var plumber = require('gulp-plumber');
var livereload = require('gulp-livereload');
var prefix = require('gulp-autoprefixer');
/* ===== HTML TASKS ===== */
gulp.task('html', function(){
gulp.src('index.html')
.pipe(livereload());
});
/* ===== SCRIPT TASKS ===== */
//Uglifies
gulp.task('scripts', function(){
gulp.src('js/*.js')
.pipe(plumber())
.pipe(uglify())
.pipe(gulp.dest('js/minjs'));
});
/* ===== STYLE TASKS ===== */
//compiling and compressing scss files
gulp.task('styles', function () {
return sass('scss/**/*.scss', { style: 'compressed' })
.on('error', sass.logError)
.pipe(gulp.dest('css'))
.pipe(livereload());
});
/* ===== WATCH ===== */
//watches JS and SCSS
gulp.task('watch', function(){
livereload.listen();
gulp.watch('index.html', ['html']);
gulp.watch('js/*.js', ['scripts']);
gulp.watch('scss/*', ['styles']);
});
/* ===== DEFAULT ===== */
gulp.task('default', ['scripts', 'styles', 'watch']);
方法中的notifyItemRangeInserted
方法代替RecyclerView.Adapter
方法,在recyclerView的顶部插入项目。
notifyDataSetChanged
当您尝试在recyclerView顶部添加项目时,您的positionStart将为0,而itemCount是您在recyclerView之上添加的项目数。
答案 1 :(得分:0)
我有类似的问题,我设法解决了。
我使用了一个列表,并在后台线程中添加了此列表末尾的数据。 但在RecyclerView中,我以相反的顺序显示数据。为此,我对物品进行了反转。我的适配器中的索引(如下所示:invertedPosition = listSize - 1 - position)。
在这种情况下,我遇到的问题与你描述的完全一样。
为了解决这个问题,我做了两处修改: 1)摆脱适配器中位置的反转; 2)在LinearLayoutManager中打开reverseLayout选项(通过setReverseLayout(true)调用)
而且,瞧,一切都按原样运作。
希望它也能帮到你。
答案 2 :(得分:0)
在将数据插入回收器视图中并希望保留在顶部时,可以将AdapterDataObserver添加到视图适配器:
class Model extends ChangeNotifier {
bool error = false;
func() {
try {
await execute();
error = false
} catch {
error = true;
print(e.toString());
}
}
}
class ExampleWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
builder: (context) => Model(),
child: Consumer<Model>(builder: (context, model, _) {
return FloatingActionButton(
child: model.error ? Icon(Icons.error) : Icon(Icons.check),
onPressed: () {
model.func();
}
);
…