0

以下は私の現在のコードのスニペットですが、スクロールしていくとアニメーションがリストの一番下に来るようになり、fb/instaフィードのようにprogressbar/spinnerを追加したいと考えています。ページングライブラリを使用したRecyclerVewでプログレスバーを実装する(スクロールダウンしてさらに読み込む)?

もう一度スクロールすると新しい項目がリストで更新されますが、フィードのように見えるたびにプログレスバーでスムーズに移行します。

TIA。

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     RecyclerView recyclerView = findViewById(R.id.userList); 
     LinearLayoutManager llm = new LinearLayoutManager(this); 
     llm.setOrientation(LinearLayoutManager.VERTICAL); 
     recyclerView.setLayoutManager(llm); 

     UserViewModel viewModel = ViewModelProviders.of(this).get(UserViewModel.class); 
     viewModel.init(); 
     final UserAdapter userUserAdapter = new UserAdapter(); 

     viewModel.userList.observe(this, pagedList -> { 
      userUserAdapter.setList(pagedList); 
     }); 

     recyclerView.setAdapter(userUserAdapter); 
    } 
} 

データソース:

public class MyDataSource extends TiledDataSource<User> { 

    Webservice webservice; 

    MyDataSource(){ 
    webservice = WebServiceImpl.createGitHubService(); 
    } 

    @Override 
    public int countItems() { 
     return DataSource.COUNT_UNDEFINED; 
    } 

    @Override 
    public List<User> loadRange(int startPosition, int count) { 
     List<User> gitHubUser = new ArrayList(); 
     try { 
      Response<List<User>> response = webservice.getUsers(startPosition,count).execute(); 
      if (response.isSuccessful() && response.code() == 200) { 
       gitHubUser.addAll(response.body()); 
      } else { 
       Log.e("API CALL", response.message()); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return gitHubUser; 
    } } 

のViewModel:

public class UserViewModel extends ViewModel { 

    public LiveData<PagedList<User>> userList; 
    MyDataSource tDataSource; 

    public UserViewModel() { 

    } 

    public void init() { 

     userList = new LivePagedListProvider<Integer, User>() { 
      @Override 
      protected DataSource<Integer, User> createDataSource() { 
       tDataSource = new MyDataSource(); 
       return tDataSource; 
      } 

     }.create(0, new PagedList.Config.Builder() 
       .setEnablePlaceholders(false) 
       .setPageSize(20) 
       .setInitialLoadSizeHint(20) 
       .build()); 
    } 
} 

答えて

0

ヘルパークラスEndlessRecyclerOnScrollListenerを作成します。 次のコードを貼り付けます。

import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 

public abstract class EndlessRecyclerOnScrollListener extends RecyclerView.OnScrollListener { 
    public static String TAG = EndlessRecyclerOnScrollListener.class.getSimpleName(); 

    private int previousTotal = 0; // The total number of items in the dataset after the last load 
    private boolean loading = true; // True if we are still waiting for the last set of data to load. 
    private int visibleThreshold = 5; // The minimum amount of items to have below your current scroll position before loading more. 
    int firstVisibleItem, visibleItemCount, totalItemCount; 

    private int current_page = 1; 

    private LinearLayoutManager mLinearLayoutManager; 

    public EndlessRecyclerOnScrollListener(LinearLayoutManager linearLayoutManager) { 
     this.mLinearLayoutManager = linearLayoutManager; 
    } 

    @Override 
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
     super.onScrolled(recyclerView, dx, dy); 

     visibleItemCount = recyclerView.getChildCount(); 
     totalItemCount = mLinearLayoutManager.getItemCount(); 
     firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition(); 

     if (loading) { 
      if (totalItemCount > previousTotal) { 
       loading = false; 
       previousTotal = totalItemCount; 
      } 
     } 
     if (!loading && (totalItemCount - visibleItemCount) 
       <= (firstVisibleItem + visibleThreshold)) { 
      // End has been reached 

      // Do something 
      current_page++; 

      onLoadMore(current_page); 

      loading = true; 
     } 
    } 

    public abstract void onLoadMore(int current_page); 
} 

あなたの活動では、次のコードを追加してください。

public class SampleActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_sample); 

     RecyclerView recyclerView = (RecyclerView) findViewById(R.id.list); 
     LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); 
     recyclerView.setLayoutManager(linearLayoutManager); 
     recyclerView.setOnScrollListener(new EndlessRecyclerOnScrollListener(linearLayoutManager) { 
      @Override 
      public void onLoadMore(int current_page) { 
       // make progress bar visible. 
       //call API 
      } 
     }); 
    } 
} 

recyclerviewの下に進行状況バーを配置します。 recyclerviewを下にスクロールすると、onLoadMore()が呼び出されます。

詳細については、https://gist.github.com/ssinss/e06f12ef66c51252563e

を参照してください。
関連する問題