Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 滚动位置未保存在Grdiview中_Android_Scrollview_Android View_Scroll Position - Fatal编程技术网

Android 滚动位置未保存在Grdiview中

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() {

有人能帮我吗?我在GridView的滚动中遇到了一个问题。我要做的是从API中显示GridView中的前10个产品。。现在我需要的是-当用户滚动并获得列表的最后位置时,API再次点击,页面值为2。。滚动显示用户所在的当前位置。。现在显示数据,适配器更改其值。。但当新API点击时,滚动显示在顶部。。。谁能告诉我该怎么办???非常感谢你的帮助

我做什么-

        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()如果这是您用来更新列表或包含列表更新方法的方式:)为什么减号?任何原因?您可以在滚动列表时获取位置。获取当前位置为什么减号?任何原因?您可以在滚动列表时获取位置。获取当前位置