2016-03-29 28 views
0

Daha fazla veri yükledikten sonra ızgara görünümü başa dön, yükledikten sonra son öğeden kaydırmaya devam etmesini istiyorum. onScrollStateChanged'u kullanmayı denedim ve state == SCROLL_STATE_TOUCH_SCROLL'da yüklemeyi denedim, ancak aynı sorunla karşılaştım.Adaptörün verileri değiştiğinde grid görünümünün en üst konumuna kaydırılmasını engellemenin bir yolu var mı?

@Override 
    protected void onPostExecute(ArrayList<productDetails> AProducts) { 
     final ArrayList<productDetails> products = AProducts; 
     super.onPostExecute(products); 

     productAdapter = new productAdapter(category.this, productDetailsArr); 
     gridView.setAdapter(productAdapter); 
     productAdapter.notifyDataSetChanged(); 


     if (products != null) { 
      gridView.setOnScrollListener(new AbsListView.OnScrollListener() { 

       @Override 
       public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
        if (firstVisibleItem + visibleItemCount >= totalItemCount) { 
         // End has been reached 
         limit = Integer.parseInt(((productDetails) (products.get(products.size() - 1))).getProductID()); 
         // limit = Integer.parseInt(products.get(3).get(products.get(3).size() - 1)); 


         if (flimit != limit) { 
          flimit = limit; //to stop using last element in fatching last products more than one time. 
          if (UtilityClass.isInternetAvailable(getApplicationContext())) { 

                    new getProductsTask().execute(category); 


          } else { 
           Intent internet = new Intent(getBaseContext(), NointernetConnection.class); 
           startActivity(internet); 
           finish(); 

          } 
         } else { 
          Log.d("FLimit", ">>" + "END"); 
         } 

        } else { 
         progressDialog.dismiss(); 
        } 

       } 

       @Override 
       public void onScrollStateChanged(AbsListView view, int scrollState) { 
        } 

       } 

      }); 

     } 
    } 

cevap

1

İlk olarak, her zaman GridView bir adaptör sınıfı (productAdapter) OnPostExecute yönteminde her seferinde yeni bir nesne ve set bağdaştırıcı oluşturulması gerekmez veri değiştiğinde veya ağ çağrı .Bu yeni tepkisi gridview'i en üst konuma kaydırmanın nedenleri. Adaptör sınıfınızda bir setter yöntemi yaratabilirsiniz.

ArrayList <productDetails> productDetailsArr; 

public void setProductDetailsArr(ArrayList<productDetails> productDetailsArr) { 
      this.productDetailsArr = productDetailsArr; 
     } 

ve OnPostExecute yönteminde

Adaper null veya boş not.If ise, yalnızca yeni bir veri kümesi sağlamak zorunda ardından sadece yeni bir instance.Otherwise oluşturmak zorunda kontrol etmek için aşağıdaki kodu yazın ve sadece notifyDataSetChanged çağrı().

if(productAdapter == null) 
{ 
    productAdapter = new productAdapter(category.this, productDetailsArr); 
    gridView.setAdapter(productAdapter); 

}else{ 

    productAdapter.setProductDetailsArr(productDetailsArr); 
    productAdapter.notifyDataSetChanged(); 
    } 
+0

Teşekkürler, benim için çalışıyor: D –