2015-03-30 2 views
3

Пытается реализовать разбиение на страницы в RecyclerView, но когда RecyclerView достигает своего конца, а приложения начинают загружать новую часть данных, RecyclerView перескакивает на нее сверху.RecyclerView перескакивает вверх, когда разбивается на страницы

cityListRecyclerview = (RecyclerView) findViewById(R.id.recyclerView); 
    final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); 
    cityListRecyclerview.setLayoutManager(linearLayoutManager); 
    loadFromUrl(); 

    cityListRecyclerview.setOnScrollListener(new RecyclerView.OnScrollListener() { 
     @Override 
     public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
      super.onScrolled(recyclerView, dx, dy); 
      visibleItemCount = linearLayoutManager.getChildCount(); 
      totalItemCount = linearLayoutManager.getItemCount(); 
      pastVisiblesItems = linearLayoutManager.findFirstVisibleItemPosition(); 

      if (loading) { 
       if ((visibleItemCount+pastVisiblesItems) >= totalItemCount) { 
        loading = false; 
        page++; 
        url += Api.OFFSET_URL + String.valueOf(page); 
        loadFromUrl(); 
        Log.v("LIST", "Last Item Wow !"); 
       } 
      } 
     } 
    }); 

Метод loadFromUrl():

public void loadFromUrl() { 

    Ion.with(MainActivity.this) 
      .load(url) 
      .asJsonObject() 
      .setCallback(new FutureCallback<JsonObject>() { 

       @Override 
       public void onCompleted(Exception e, JsonObject jsonObject) { 
        progressDialog.dismiss(); 

        JsonArray jsonArray = jsonObject.getAsJsonArray("flats"); 

        jsonObjectToPass = jsonArray; 

        for(int i = 0; i < jsonArray.size(); i++) { 
         JsonElement obj = jsonArray.get(i); 
         JsonObject jsonObject1 = obj.getAsJsonObject(); 
         ............ here parsing JSON object and nothing interesting 
         adapter = new OffersAdapter(MainActivity.this, cityList); 
         adapter.setClickListener(MainActivity.this); 
         loading = true; 
         cityListRecyclerview.setAdapter(adapter); 
        } 

       } 

      }); 

} 

XML-файл:

<android.support.v7.widget.RecyclerView 
    android:id="@+id/recyclerView" 
    android:scrollbars="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    /> 

И Gradle файл:

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
compile 'com.android.support:appcompat-v7:22.0.0' 
compile 'com.google.android.gms:play-services:7.0.0'} 

Так может кто-нибудь сказать, что я делать не так?

ответ

4

Так что проблема была действительно глупо! Во-первых я переехал эти две вещи в OnCreate()

adapter = new OffersAdapter(MainActivity.this, cityList); 
cityListRecyclerview.setAdapter(adapter); 

И добавил

adapter.notifyDataSetChanged(); 

В loadFromUrl() метод, и теперь все работает хорошо: D Может быть, если кто-то будет иметь ту же проблему, то он 'll вижу мой пост: D

+0

Я использую то же самое, но снова вид ресайклера перемещается в начало. – RAHULRSANNIDHI

+0

@RAHULRSANNIDHI Вы полностью перезагружаете «RecyclerView»? Потому что это решение работает, когда вам нужно полностью перезагрузить его. –

+0

Выполнял ту же ошибку. Работает на меня! –