## Tutorial How To Use FrogoRecyclerView Multi View Holder
This is the procedure for using frogo-recycler-view multi type view
## Screen Shoot Apps
| Main | Multi View | Empty View |
|:------------------:|:---------------------:|:-----------------:|
|
|
|
|
## Usage (How to use this project)
Just following the step until finish
### Step 1. Create xml view
### Step 2. Setup requirement (Multi Adapter)
#### List Value Option
const val OPTION_HOLDER_FIRST = 0
const val OPTION_HOLDER_SECOND = 1
#### Kotlin (using injector singleton, with 2 custom view holder)
private fun firstCallback(): IFrogoViewHolder {
return object : IFrogoViewHolder {
override fun setupInitComponent(view: View, data: ExampleModel) {
// Init component content item recyclerview
view.findViewById(R.id.frogo_rv_grid_type_1_tv_title).text = data.name
Glide.with(view.context).load(FrogoRvConstant.LINK_PHOTO_GITHUB).into(view.findViewById(R.id.frogo_rv_grid_type_1_iv_poster))
}
}
}
private fun secondCallback(): IFrogoViewHolder {
return object : IFrogoViewHolder{
override fun setupInitComponent(view: View, data: ExampleModel) {
// Init component content item recyclerview
view.findViewById(R.id.frogo_rv_grid_type_3_tv_title).text = data.name
view.findViewById(R.id.frogo_rv_grid_type_3_tv_subtitle).text = data.name
view.findViewById(R.id.frogo_rv_grid_type_3_tv_desc).text = FrogoRvConstant.DUMMY_LOREM_IPSUM
Glide.with(view.context).load(FrogoRvConstant.LINK_PHOTO_GITHUB).into(view.findViewById(R.id.frogo_rv_grid_type_3_iv_poster))
}
}
}
private fun firstListenerType(): FrogoRecyclerViewListener{
return object : FrogoRecyclerViewListener{
override fun onItemClicked(data: ExampleModel) {
showToast(data.name + " First")
}
override fun onItemLongClicked(data: ExampleModel) {
showToast("LAYOUT TYPE 1")
}
}
}
private fun secondListenerType() : FrogoRecyclerViewListener{
return object : FrogoRecyclerViewListener{
override fun onItemClicked(data: ExampleModel) {
showToast(data.name + " Second")
}
override fun onItemLongClicked(data: ExampleModel) {
showToast("LAYOUT TYPE 2")
}
}
}
private fun data() : MutableList> {
val data = mutableListOf>()
data.add(FrogoHolder(ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_1, FrogoRvConstant.OPTION_HOLDER_FIRST, firstCallback(), firstListenerType()))
data.add(FrogoHolder(ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_3, FrogoRvConstant.OPTION_HOLDER_SECOND, secondCallback(), secondListenerType()))
data.add(FrogoHolder(ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_3, FrogoRvConstant.OPTION_HOLDER_SECOND, secondCallback(), secondListenerType()))
data.add(FrogoHolder(ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_3, FrogoRvConstant.OPTION_HOLDER_SECOND, secondCallback(), secondListenerType()))
data.add(FrogoHolder(ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_3, FrogoRvConstant.OPTION_HOLDER_SECOND, secondCallback(), secondListenerType()))
data.add(FrogoHolder(ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_1, FrogoRvConstant.OPTION_HOLDER_FIRST, firstCallback(), firstListenerType()))
data.add(FrogoHolder(ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_1, FrogoRvConstant.OPTION_HOLDER_FIRST, firstCallback(), firstListenerType()))
data.add(FrogoHolder(ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_3, FrogoRvConstant.OPTION_HOLDER_SECOND, secondCallback(), secondListenerType()))
data.add(FrogoHolder(ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_3, FrogoRvConstant.OPTION_HOLDER_SECOND, secondCallback(), secondListenerType()))
data.add(FrogoHolder(ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_1, FrogoRvConstant.OPTION_HOLDER_FIRST, firstCallback(), firstListenerType()))
return data
}
private fun setupFrogoRecyclerView() {
binding.frogoRecyclerView
.injector()
.addDataFH(data())
.createLayoutStaggeredGrid(2)
.build()
}
#### Java (sample using ViewBinding)
private static IFrogoViewHolder firstCallback() {
return (view, data) -> {
// Init component content item recyclerview
TextView title = view.findViewById(R.id.frogo_rv_grid_type_1_tv_title);
ImageView photo = view.findViewById(R.id.frogo_rv_grid_type_1_iv_poster);
title.setText(data.getName());
Glide.with(view.getContext()).load(FrogoRvConstant.LINK_PHOTO_GITHUB).into(photo);
};
}
private static IFrogoViewHolder secondCallback() {
return (view, data) -> {
// Init component content item recyclerview
TextView title = view.findViewById(R.id.frogo_rv_grid_type_3_tv_title);
TextView subTitle = view.findViewById(R.id.frogo_rv_grid_type_3_tv_subtitle);
TextView desc = view.findViewById(R.id.frogo_rv_grid_type_3_tv_desc);
ImageView photo = view.findViewById(R.id.frogo_rv_grid_type_3_iv_poster);
title.setText(data.getName());
subTitle.setText(data.getName());
desc.setText(FrogoRvConstant.DUMMY_LOREM_IPSUM);
Glide.with(view.getContext()).load(FrogoRvConstant.LINK_PHOTO_GITHUB).into(photo);
};
}
private FrogoRecyclerViewListener firstListenerType() {
return new FrogoRecyclerViewListener() {
@Override
public void onItemLongClicked(ExampleModel data) {
showToast(data.getName() + " First");
}
@Override
public void onItemClicked(ExampleModel data) {
showToast("LAYOUT TYPE 1");
}
};
}
private FrogoRecyclerViewListener secondListenerType() {
return new FrogoRecyclerViewListener() {
@Override
public void onItemLongClicked(ExampleModel data) {
showToast(data.getName() + " Second");
}
@Override
public void onItemClicked(ExampleModel data) {
showToast("LAYOUT TYPE 2");
}
};
}
private ArrayList> data() {
ArrayList> data = new ArrayList<>();
data.add(new FrogoHolder(new ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_1, FrogoRvConstant.OPTION_HOLDER_FIRST, firstCallback(), firstListenerType()));
data.add(new FrogoHolder(new ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_3, FrogoRvConstant.OPTION_HOLDER_SECOND, secondCallback(), secondListenerType()));
data.add(new FrogoHolder(new ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_3, FrogoRvConstant.OPTION_HOLDER_SECOND, secondCallback(), secondListenerType()));
data.add(new FrogoHolder(new ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_3, FrogoRvConstant.OPTION_HOLDER_SECOND, secondCallback(), secondListenerType()));
data.add(new FrogoHolder(new ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_3, FrogoRvConstant.OPTION_HOLDER_SECOND, secondCallback(), secondListenerType()));
data.add(new FrogoHolder(new ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_1, FrogoRvConstant.OPTION_HOLDER_FIRST, firstCallback(), firstListenerType()));
data.add(new FrogoHolder(new ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_1, FrogoRvConstant.OPTION_HOLDER_FIRST, firstCallback(), firstListenerType()));
data.add(new FrogoHolder(new ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_3, FrogoRvConstant.OPTION_HOLDER_SECOND, secondCallback(), secondListenerType()));
data.add(new FrogoHolder(new ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_3, FrogoRvConstant.OPTION_HOLDER_SECOND, secondCallback(), secondListenerType()));
data.add(new FrogoHolder(new ExampleModel(Constant.FULL_NAME), R.layout.frogo_rv_grid_type_1, FrogoRvConstant.OPTION_HOLDER_FIRST, firstCallback(), firstListenerType()));
return data;
}
private void setupFrogoRecyclerView() {
binding.frogoRecyclerView.injector()
.addDataFH(data())
.createLayoutStaggeredGrid(2)
.build();
}
## Sample Code (Multi-type-view)
- Kotlin - [KotlinNoAdapterMultiVewActivity.kt](https://github.com/amirisback/frogo-recycler-view/blob/master/app/src/main/java/com/frogobox/recycler/sample/kotlin/noadapter/KotlinNoAdapterMultiVewActivity.kt)
- Java - [JavaNoAdapterMultiViewActivity.java](https://github.com/amirisback/frogo-recycler-view/blob/master/app/src/main/java/com/frogobox/recycler/sample/java/noadapter/JavaNoAdapterMultiViewActivity.java)