Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Adapter
- public class GenericAdapter<T,K extends GenericViewHolder<T>>extends RecyclerView.Adapter<GenericViewHolder<T>> {
- private IItem.Counter counter;
- private IItem.Provider<T> provider;
- private HashMap<String,IItemActionListener> listeners;
- private IViewHolderProducer<K> viewHolderProducer;
- private int layoutId;
- public GenericAdapter(IItem.Counter counter, IItem.Provider<T> provider, HashMap<String, IItemActionListener> listeners, IViewHolderProducer<K> viewHolderProducer, int layoutId) {
- this.counter = counter;
- this.provider = provider;
- this.listeners = listeners;
- this.viewHolderProducer = viewHolderProducer;
- this.layoutId = layoutId;
- }
- @NonNull
- @Override
- public GenericViewHolder<T> onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
- View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(layoutId,viewGroup,false);
- return viewHolderProducer.produce(itemView);
- }
- @Override
- public void onBindViewHolder(@NonNull GenericViewHolder<T> holder, int itemPosition) {
- holder.bindItem(holder,provider.getItem(itemPosition),itemPosition);
- }
- @Override
- public int getItemCount() {
- return counter.getItemCount();
- }
- }
- // Przykładowy viewHolder
- public class ViewHolder {
- public static class Country extends GenericViewHolder<Country>{
- private TextView countryName;
- public forCountry(@NonNull View itemView, HashMap<String, IItemActionListener> listeners) {
- super(itemView, listeners);
- countryName = (TextView) itemView.findViewById(R.id.item_country_name);
- }
- @Override
- public void bindItem(GenericViewHolder holders, Country item, int itemPosition) {
- ViewHolder.forCountry holder = (forCountry) holders;
- holder.countryName.setText(item.getName());
- holder.itemView.setOnClickListener(view ->
- Objects.requireNonNull(getListeners().get("onclick")).onClick(itemPosition));
- }
- }
- }
- // Wywołanie utowrzenia adaptera przez prezenter
- void foo(){
- dbApi.labels().fetchSelected()
- .doOnSuccess((labels)->
- myView.setLabelAdapter((IItem.Provider<Label>) labels::get, labels::size, this.setOnClickListenersForLabels(list)))
- .subscribe();
- }
- // Inicjalizacja adaptera w widoku
- @Override
- public void setLabelAdapter(IItem.Provider itemProvider, IItem.Counter itemCounter, HashMap<String, IItemActionListener> listeners) {
- IViewHolderProducer<GenericViewHolder<Label>> producer = itemView -> new ViewHolder.forLabel(itemView,listeners);
- GenericAdapter<Label,GenericViewHolder<Label>> adapter = new GenericAdapter<>(itemCounter,itemProvider,listeners,producer,R.layout.recycler_item_label);
- recyclerView.setAdapter(adapter);
- }
- public interface IItemActionListener {
- void onClick(int itemPosition);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement