Android 滚动位置未保存在Grdiview中
有人能帮我吗?我在GridView的滚动中遇到了一个问题。我要做的是从API中显示GridView中的前10个产品。。现在我需要的是-当用户滚动并获得列表的最后位置时,API再次点击,页面值为2。。滚动显示用户所在的当前位置。。现在显示数据,适配器更改其值。。但当新API点击时,滚动显示在顶部。。。谁能告诉我该怎么办???非常感谢你的帮助 我做什么-Android 滚动位置未保存在Grdiview中,android,scrollview,android-view,scroll-position,Android,Scrollview,Android View,Scroll Position,有人能帮我吗?我在GridView的滚动中遇到了一个问题。我要做的是从API中显示GridView中的前10个产品。。现在我需要的是-当用户滚动并获得列表的最后位置时,API再次点击,页面值为2。。滚动显示用户所在的当前位置。。现在显示数据,适配器更改其值。。但当新API点击时,滚动显示在顶部。。。谁能告诉我该怎么办???非常感谢你的帮助 我做什么- grid.setOnScrollListener(new AbsListView.OnScrollListener() {
grid.setOnScrollListener(new AbsListView.OnScrollListener() {
int last_item;
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
int lastitem = firstVisibleItem + visibleItemCount;
if(lastitem == totalItemCount){
HitApi();//This is the method where API hits with the new page value
}
}
});
xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">
<GridView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/products_GridView"
android:numColumns="auto_fit"
android:listSelector="@android:color/transparent"
android:verticalSpacing="1dp"
android:horizontalSpacing="1dp"
>
</GridView>
</LinearLayout>
在适配器中尝试类似的操作,以获得最后一个可见位置
public class GridAdapter extends BaseAdapter {
...
int previouslyDisplayedPosition = -1;
...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(previouslyDisplayedPosition != position) {
....
previouslyDisplayedPosition = position;
}
return convertedView;
}
只是个主意。我不确定它是否有效。只需解决一下在适配器中尝试类似的方法,以获得最后一个可见位置
public class GridAdapter extends BaseAdapter {
...
int previouslyDisplayedPosition = -1;
...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(previouslyDisplayedPosition != position) {
....
previouslyDisplayedPosition = position;
}
return convertedView;
}
只是个主意。我不确定它是否有效。只是一个解决办法试试这个
/***
* LodeMore Variables
*/
private int lastVisibleItem, totalItemCount;
private int visibleThreshold = 1;
private int index = 1;
private boolean loading;
private void initLodeMoreAdapter()
{
if (recyclerView.getLayoutManager() instanceof GridLayoutManager)
{
final GridLayoutManager linearLayoutManager = (GridLayoutManager) rvResponse.getLayoutManager();
rvResponse.addOnScrollListener(new RecyclerView.OnScrollListener()
{
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy)
{
super.onScrolled(recyclerView, dx, dy);
totalItemCount = linearLayoutManager.getItemCount();
lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();
if (!loading &&totalItemCount <= (lastVisibleItem + visibleThreshold))
{
// End has been reached
// Do something
loading = true;
getResponseListing();
}
}
});
}
}
private void getResponseListing()
{
if (utility.isNetworkAvailable())
{
API Call...
adapter.notifyDataSetChanged();
loading = false;
}
}
/***
*洛德摩尔变量
*/
private int lastVisibleItem,totalItemCount;
私有int visibleThreshold=1;
私有int指数=1;
私有布尔加载;
私有void initLodeMoreAdapter()
{
if(recyclerView.getLayoutManager()实例GridLayoutManager)
{
最终GridLayoutManager linearLayoutManager=(GridLayoutManager)rvResponse.getLayoutManager();
rvResponse.addOnScrollListener(新的RecyclerView.OnScrollListener()
{
@凌驾
已填空的公共空间(RecyclerView RecyclerView、int dx、int dy)
{
super.onScrolled(recyclerView、dx、dy);
totalItemCount=linearLayoutManager.getItemCount();
lastVisibleItem=linearLayoutManager.findLastVisibleItemPosition();
如果(!loading&&totalItemCount尝试此
/***
* LodeMore Variables
*/
private int lastVisibleItem, totalItemCount;
private int visibleThreshold = 1;
private int index = 1;
private boolean loading;
private void initLodeMoreAdapter()
{
if (recyclerView.getLayoutManager() instanceof GridLayoutManager)
{
final GridLayoutManager linearLayoutManager = (GridLayoutManager) rvResponse.getLayoutManager();
rvResponse.addOnScrollListener(new RecyclerView.OnScrollListener()
{
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy)
{
super.onScrolled(recyclerView, dx, dy);
totalItemCount = linearLayoutManager.getItemCount();
lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();
if (!loading &&totalItemCount <= (lastVisibleItem + visibleThreshold))
{
// End has been reached
// Do something
loading = true;
getResponseListing();
}
}
});
}
}
private void getResponseListing()
{
if (utility.isNetworkAvailable())
{
API Call...
adapter.notifyDataSetChanged();
loading = false;
}
}
/***
*洛德摩尔变量
*/
private int lastVisibleItem,totalItemCount;
私有int visibleThreshold=1;
私有int指数=1;
私有布尔加载;
私有void initLodeMoreAdapter()
{
if(recyclerView.getLayoutManager()实例GridLayoutManager)
{
最终GridLayoutManager linearLayoutManager=(GridLayoutManager)rvResponse.getLayoutManager();
rvResponse.addOnScrollListener(新的RecyclerView.OnScrollListener()
{
@凌驾
已填空的公共空间(RecyclerView RecyclerView、int dx、int dy)
{
super.onScrolled(recyclerView、dx、dy);
totalItemCount=linearLayoutManager.getItemCount();
lastVisibleItem=linearLayoutManager.findLastVisibleItemPosition();
如果(!loading&&totalItemCount正常,那么假设hitApi()
使用新项更新ListView
,那么该方法可能会调用.clear()
在当前列表上,这将导致问题,然后它将添加新项目;要保持最后位置,您必须在hitApi()之前添加此项。
方法:
int i = yourList.getFirstVisiblePosition();
View v = yourList.getChildAt(0);
int t = 0;
if(v!=null)v.getTop();
然后在调用hitApi()
方法后,将旧位置设置回:
yourList.setSelectionFromTop(i, t);
好的,假设hitApi()
使用新项更新ListView
,那么该方法可能会调用当前列表上的.clear()
,这将导致问题,然后它将添加新项;要保持最后位置,您必须在hitApi()
方法之前添加此项:
int i = yourList.getFirstVisiblePosition();
View v = yourList.getChildAt(0);
int t = 0;
if(v!=null)v.getTop();
然后在调用hitApi()
方法后,将旧位置设置回:
yourList.setSelectionFromTop(i, t);
我真的不明白你的目的是什么!当用户导航到另一个活动并返回gridView活动时,你需要保存滚动位置吗?你说的页面值2是什么意思?你能给我们看一个演示或屏幕截图来更好地描述情况吗?不,我不去下一个活动。只是我的适配器数据发生了变化使用新值,每次滚动和数据更改时,滚动都位于顶部。它将从新数据加载或添加到列表的位置开始。我假设您使用的是滚动视图,对吗?它是否在线性布局中?请与我们共享您的xmlI使用的是simple Gridview。请选中并包括您的notifyDataSetChanged()如果是您用来更新列表或包含列表更新方法的方式:)我真的不明白你的目的是什么!当用户导航到另一个活动并返回gridView活动时,你需要保存滚动位置吗?你说的页面值2是什么意思?你能给我们看一个演示或屏幕截图来更好地描述情况吗?不,我不去下一个活动。只是我的适配器数据发生了变化使用新值,每次滚动和数据更改时,滚动都位于顶部。它将从新数据加载或添加到列表的位置开始。我假设您使用的是滚动视图,对吗?它是否在线性布局中?请与我们共享您的xmlI使用的是simple Gridview。请选中并包括您的notifyDataSetChanged()如果这是您用来更新列表或包含列表更新方法的方式:)为什么减号?任何原因?您可以在滚动列表时获取位置。获取当前位置为什么减号?任何原因?您可以在滚动列表时获取位置。获取当前位置