An adapter to reduce time for writing boilerplate code and speed up build time for RecyclerView.
Step 1. Add the JitPack repository to your build file
Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Step 2. Add the dependency
dependencies {
implementation 'com.github.islamdidarmd:easyadapter:0.1.2'
}
For general RecyclerView:
Java
recyclerView.setAdapter(new EasyAdapter.Builder<Integer>()
.setLayout(R.layout.row_list)
.setData(Arrays.asList(1, 2, 3, 4))
.setCallback(new Callback<Integer>() {
@Override
public void onBindViewHolder(@NonNull EasyAdapter.Companion.ViewHolder viewHolder, @NonNull View itemView, int position, Integer item) {
TextView tv = viewHolder.itemView.findViewById(R.id.textView);
tv.setText(item.toString());
}
})
.build());
Kotlin
recyclerView.adapter = EasyAdapter.Builder<Int>()
.setLayout(R.layout.row_list)
.setData(list)
.setCallback(object : Callback<Int> {
override fun onBindViewHolder(viewHolder: EasyAdapter.Companion.ViewHolder, itemView: View, position: Int, item: Int) {
val tv: TextView = viewHolder.itemView.textView
tv.text = item.toString()
}
})
.build()
For RecyclerView with multiple section:
Java
recyclerView.setAdapter(new EasySectionedAdapter.Builder<Integer>()
.setHeaderLayout(R.layout.row_header)
.setChildLayout(R.layout.row_list)
.setDataSet(Arrays.asList(Arrays.asList(1, 2, 3, 4), Arrays.asList(1, 2), Arrays.asList(1, 2, 3)))
.setCallback(new SectionedCallback<Integer>() {
@Override
public void onBindHeader(@NotNull EasyAdapter.Companion.ViewHolder viewHolder, int section) {
viewHolder.itemView.setBackgroundColor(Color.BLACK);
TextView tv = viewHolder.itemView.findViewById(R.id.textView);
tv.setTextColor(Color.WHITE);
tv.setText("Header");
}
@Override
public void onBindChild(@NotNull EasyAdapter.Companion.ViewHolder viewHolder, int section, int positionInSection, int position, Integer item) {
TextView tv = viewHolder.itemView.findViewById(R.id.textView);
tv.setText(item.toString());
tv.setTextColor(Color.BLACK);
viewHolder.itemView.setBackgroundColor(Color.WHITE);
}
})
.build());
Kotlin
recyclerView.adapter = EasySectionedAdapter.Builder<Int>()
.setHeaderLayout(R.layout.row_header)
.setChildLayout(R.layout.row_list)
.setDataSet(Arrays.asList(Arrays.asList(1, 2, 3, 4), Arrays.asList(1, 2), Arrays.asList(1, 2, 3)))
.setCallback(object : SectionedCallback<Int> {
override fun onBindHeader(viewHolder: EasyAdapter.Companion.ViewHolder, section: Int) {
viewHolder.itemView.setBackgroundColor(Color.BLACK)
val tv = viewHolder.itemView.textView
tv.setTextColor(Color.WHITE)
tv.text = "Header for section $section"
}
override fun onBindChild(viewHolder: EasyAdapter.Companion.ViewHolder, section: Int, positionInSection: Int, position: Int, item: Int) {
val tv = viewHolder.itemView.textView
tv.text = item.toString()
tv.setTextColor(Color.BLACK)
viewHolder.itemView.setBackgroundColor(Color.WHITE)
}
})
.build()
}
To update dataset use Adapter.updateDataSet()
with your new dataset.
For a complete example see sample app