2016-11-05 57 views
1

有人可以请帮我我有一个GridView的滚动问题我做的是我从API显示GridView中的前10个产品..现在我需要的是 - 当用户滚动并且获取列表的最后位置,然后API再次以页面值2命中..并且滚动显示来自用户所在的当前位置。现在显示数据并且适配器改变其值。但是当滚动显示在顶部时新的API点击...任何人都可以告诉我该怎么办?非常感谢,请帮助..滚动位置不保存在Grdiview

我做什么 -

 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> 
+0

我真的不明白你的目标!当用户导航到其他活动并返回到GridView活动时,是否需要保存滚动位置?页面值2是什么意思?你可以向我们展示一个更好地描述这种情况的演示或屏幕截图 –

+0

不,我不打算接下来的活动。只是我的适配器数据随着新值而改变,并且每当我滚动和数据改变时滚动在最佳。它会从新的数据加载或添加到列表中开始 –

+0

我会假设你使用的是一个scrollView的权利?它是在一个linearLayout?请与我们分享您的xml –

回答

-1

尝试在你的适配器这样的事情来获得最后一个可见的位置

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; 
    } 

刚一个主意。不知道它会不会起作用。只是周围的工作

+0

为什么减号?任何原因?滚动时您可以获得位置。获取当前位置 –

0

尝试......

/*** 
    * 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; 
     } 
    } 
0

好吧,假设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);