GenericRecycler can decrease code for RecyclerView Adapter.
There is below example in this repository in app module
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.nihatalim:genericrecycler:v1.0.8'
}
private GenericRecycleAdapter<THolder, TModel> adapter = null;
THolder is extends from RecyclerView.ViewHolder class which you bind.
TModel is model class which you bind.
this.adapter = new GenericRecycleAdapter<>(this.userList, getContext(), R.layout.user_card);
this.userList is list of TModel.
getContext is a method which returns current context like this:
private Context getContext(){
return this;
}
R.layout.user_card is a layout file for fill each TModel object.
adapter.setOnAdapter(new OnAdapter<UserHolder>() {
@Override
public UserHolder onCreate(ViewGroup parent, int viewType, View view) {
final UserHolder holder = new UserHolder(view);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getContext(), adapter.getObjectList().get(holder.getPosition()).getName(), Toast.LENGTH_SHORT).show();
}
});
return holder;
}
@Override
public void OnBind(UserHolder userHolder, int position) {
userHolder.name.setText(adapter.getObjectList().get(position).getName());
userHolder.date.setText(dateFormat.format(adapter.getObjectList().get(position).getDate()));
}
// If you wanna check another LayoutManager options, go to here and see other options
// https://github.com/nihatalim/Android-GenericRecyclerAdapter/tree/master/app/src/main/java/com/nihatalim/genericrecycler/activities
@Override
public RecyclerView.LayoutManager setLayoutManager(RecyclerView.LayoutManager defaultLayoutManager) {
LinearLayoutManager lm = ((LinearLayoutManager) defaultLayoutManager);
lm.setOrientation(LinearLayoutManager.HORIZONTAL);
return lm;
}
});
// If you set LayoutManager in setOnAdapter function as LinearLayoutManager oriented HORIZONTAL, you can set snap as true and recyclerview gain each swipe one pass [Some one may be fix this words later :) ]
adapter.snap(true);
// You can set the pageNumber for initializing. This is default value.
adapter.pageNumber = 1;
// You can set pagination size. This is default value.
adapter.paginationSize = 10;
// You can set pagination time limit as ms (1 sec = 1000 ms). May be useful for some stuff like getting data from servers etc. This is default value.
adapter.paginationTimeLimit = 1000;
adapter.setOnPaginate(new OnPaginate<User>() {
@Override
public void paginate(int nextPageNumber, int paginationSize, User firstItem, User lastItem, Bundle bundle) {
// Write your pagination logic.
if(nextPageNumber>0){
List<User> list = getSubListForPage(userList, nextPageNumber, paginationSize);
if(list.size()>0){
adapter.clear(true); // Clear all items and pass true parameter for notifyDatasetChange
adapter.addAll(list, true); // Add the list and pass true parameter for notifyDatasetChange
adapter.pageNumber = nextPageNumber; // Update adapter's pageNumber
}
}
}
});
// You can call paginate function for calling paginate logic. First param is int variable for next page number and you can determine before calling. Second param is a bundle object for passing your custom params.
adapter.paginate(requestedPage, null);
adapter.build(this.recyclerView);
Have a nice code...
