当我更新时 Recyclerview 位置更改为第一个位置
Recyclerview Position changing to first position when I Update
滚动 RecyclerView
时我正在使用 onLoadMoreListener
。当您滚动到底部时,它将更新 RecyclerView
数据。更新 Recyclerview
数据后。 Recyclerview
回到顶部。理想情况下,我想保留在 RecyclerView
的位置。关于我应该如何做这件事有什么想法吗?
mAdapter.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore() {
new GroupData().execute();
}
});
内部类
public static class GroupData extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
try{
GroupList gm = new GroupList();
.....
groupvalues.add(gm);
} catch (Exception e){
Log.d("Grouplist ", e.toString());
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
mAdapter = new GroupAdapter(groupvalues,mrecyclerview);
mrecyclerview.setAdapter(mAdapter);
progressDialog.dismiss();
mAdapter.notifyDataSetChanged();
}
}
}
加载时,您必须知道新加载项的顶部元素的位置。只需致电:
recyclerView.scrollToPosition(position);
或者只保存 recyclerView 的最后已知位置,并在加载更多项目时滚动到该位置
只需在 onPostExecute 中通知您的适配器。无需再次初始化您的适配器。
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
progressDialog.dismiss();
mAdapter.notifyDataSetChanged();
}
在 onCreate 中初始化您的适配器
mAdapter = new GroupAdapter(groupvalues,mrecyclerview);
mrecyclerview.setAdapter(mAdapter);
试试这个,
public static class GroupData extends AsyncTask<Void, Void, Void> {
int size = 0;
@Override
protected void onPreExecute() {
size = groupvalues.size();
}
@Override
protected Void doInBackground(Void... voids) {
try {
GroupList gm = new GroupList();
.....
groupvalues.add(gm);
} catch (Exception e) {
Log.d("Grouplist ", e.toString());
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
mAdapter.notifyItemRangeChanged(size, groupvalues.size() - size);
progressDialog.dismiss();
}
}
滚动 RecyclerView
时我正在使用 onLoadMoreListener
。当您滚动到底部时,它将更新 RecyclerView
数据。更新 Recyclerview
数据后。 Recyclerview
回到顶部。理想情况下,我想保留在 RecyclerView
的位置。关于我应该如何做这件事有什么想法吗?
mAdapter.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore() {
new GroupData().execute();
}
});
内部类
public static class GroupData extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
try{
GroupList gm = new GroupList();
.....
groupvalues.add(gm);
} catch (Exception e){
Log.d("Grouplist ", e.toString());
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
mAdapter = new GroupAdapter(groupvalues,mrecyclerview);
mrecyclerview.setAdapter(mAdapter);
progressDialog.dismiss();
mAdapter.notifyDataSetChanged();
}
}
}
加载时,您必须知道新加载项的顶部元素的位置。只需致电:
recyclerView.scrollToPosition(position);
或者只保存 recyclerView 的最后已知位置,并在加载更多项目时滚动到该位置
只需在 onPostExecute 中通知您的适配器。无需再次初始化您的适配器。
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
progressDialog.dismiss();
mAdapter.notifyDataSetChanged();
}
在 onCreate 中初始化您的适配器
mAdapter = new GroupAdapter(groupvalues,mrecyclerview);
mrecyclerview.setAdapter(mAdapter);
试试这个,
public static class GroupData extends AsyncTask<Void, Void, Void> {
int size = 0;
@Override
protected void onPreExecute() {
size = groupvalues.size();
}
@Override
protected Void doInBackground(Void... voids) {
try {
GroupList gm = new GroupList();
.....
groupvalues.add(gm);
} catch (Exception e) {
Log.d("Grouplist ", e.toString());
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
mAdapter.notifyItemRangeChanged(size, groupvalues.size() - size);
progressDialog.dismiss();
}
}