package io.nlopez.smartadapters.sample; import android.app.Activity; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import java.util.List; import butterknife.ButterKnife; import butterknife.InjectView; import io.nlopez.smartadapters.SmartAdapter; import io.nlopez.smartadapters.builders.DefaultBindableLayoutBuilder; import io.nlopez.smartadapters.sample.model.Place; import io.nlopez.smartadapters.sample.model.User; import io.nlopez.smartadapters.sample.util.DataGenerator; import io.nlopez.smartadapters.sample.view.PlaceAltView; import io.nlopez.smartadapters.sample.view.PlaceView; import io.nlopez.smartadapters.sample.view.UserAltView; import io.nlopez.smartadapters.sample.view.UserView; import io.nlopez.smartadapters.utils.Mapper; import io.nlopez.smartadapters.views.BindableLayout; public class MultiRecyclerViewCustomBuilderActivity extends Activity { @InjectView(R.id.recycler_view) RecyclerView recyclerView; @Override public void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.activity_recyclerview); ButterKnife.inject(this); initView(); } private void initView() { List mixedList = DataGenerator.generateMix(100); recyclerView.setLayoutManager(new LinearLayoutManager(this)); SmartAdapter.items(mixedList) .map(User.class, UserView.class) .map(User.class, UserAltView.class) .map(Place.class, PlaceView.class) .map(Place.class, PlaceAltView.class) .builder(new DefaultBindableLayoutBuilder() { @Override public Class<? extends BindableLayout> viewType( @NonNull Object item, int position, @NonNull Mapper mapper) { if (item instanceof User) { User user = (User) item; if (user.getFirstName().length() % 2 == 1) { return UserView.class; } else { return UserAltView.class; } } else if (item instanceof Place) { Place place = (Place) item; if (place.getName().length() % 2 == 1) { return PlaceView.class; } else { return PlaceAltView.class; } } else { return super.viewType(item, position, mapper); } } @Override public boolean allowsMultimapping() { return true; } }) .into(recyclerView); } }