2016-11-05 7 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

の周りだけで作業はとてもhitApi()が新しいアイテムとListViewを更新することを想定し、この方法は、おそらく問題が発生します現在のリストに.clear()を呼び出します

/*** 
    * 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()方法前にこれを追加している:

int i = yourList.getFirstVisiblePosition(); 
View v = yourList.getChildAt(0); 
int t = 0; 
if(v!=null)v.getTop(); 

次にhitApi()メソッドを呼び出した後、戻って古い位置を設定します。

yourList.setSelectionFromTop(i, t); 
関連する問題