2016-11-05 58 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);