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());
}
}