Advertisement
Guest User

Untitled

a guest
Jan 17th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.94 KB | None | 0 0
  1.  
  2.  
  3. // Adapter
  4. public class GenericAdapter<T,K extends GenericViewHolder<T>>extends RecyclerView.Adapter<GenericViewHolder<T>> {
  5.     private IItem.Counter counter;
  6.     private IItem.Provider<T> provider;
  7.     private HashMap<String,IItemActionListener> listeners;
  8.     private IViewHolderProducer<K> viewHolderProducer;
  9.     private int layoutId;
  10.  
  11.     public GenericAdapter(IItem.Counter counter, IItem.Provider<T> provider, HashMap<String, IItemActionListener> listeners, IViewHolderProducer<K> viewHolderProducer, int layoutId) {
  12.         this.counter = counter;
  13.         this.provider = provider;
  14.         this.listeners = listeners;
  15.         this.viewHolderProducer = viewHolderProducer;
  16.         this.layoutId = layoutId;
  17.     }
  18.  
  19.     @NonNull
  20.     @Override
  21.     public GenericViewHolder<T> onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
  22.         View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(layoutId,viewGroup,false);
  23.         return viewHolderProducer.produce(itemView);
  24.    }
  25.  
  26.     @Override
  27.     public void onBindViewHolder(@NonNull GenericViewHolder<T> holder, int itemPosition) {
  28.         holder.bindItem(holder,provider.getItem(itemPosition),itemPosition);
  29.     }
  30.  
  31.     @Override
  32.     public int getItemCount() {
  33.         return counter.getItemCount();
  34.     }
  35. }
  36.  
  37. // Przykładowy viewHolder
  38. public class ViewHolder {
  39.  
  40.     public static class Country extends GenericViewHolder<Country>{
  41.         private TextView countryName;
  42.  
  43.         public forCountry(@NonNull View itemView, HashMap<String, IItemActionListener> listeners) {
  44.             super(itemView, listeners);
  45.             countryName = (TextView) itemView.findViewById(R.id.item_country_name);
  46.         }
  47.  
  48.         @Override
  49.         public void bindItem(GenericViewHolder holders, Country item, int itemPosition) {
  50.  
  51.             ViewHolder.forCountry holder  = (forCountry) holders;
  52.             holder.countryName.setText(item.getName());
  53.  
  54.             holder.itemView.setOnClickListener(view ->
  55.             Objects.requireNonNull(getListeners().get("onclick")).onClick(itemPosition));
  56.         }
  57.     }
  58. }
  59. // Wywołanie utowrzenia adaptera przez prezenter
  60.  
  61.  void foo(){
  62.  dbApi.labels().fetchSelected()
  63.     .doOnSuccess((labels)->
  64.         myView.setLabelAdapter((IItem.Provider<Label>) labels::get, labels::size, this.setOnClickListenersForLabels(list)))
  65.     .subscribe();
  66.  }
  67.  
  68.  // Inicjalizacja adaptera w widoku
  69.  
  70.  @Override
  71.  public void setLabelAdapter(IItem.Provider itemProvider, IItem.Counter itemCounter, HashMap<String, IItemActionListener> listeners) {
  72.      IViewHolderProducer<GenericViewHolder<Label>> producer = itemView -> new ViewHolder.forLabel(itemView,listeners);
  73.      GenericAdapter<Label,GenericViewHolder<Label>> adapter = new GenericAdapter<>(itemCounter,itemProvider,listeners,producer,R.layout.recycler_item_label);
  74.      recyclerView.setAdapter(adapter);
  75. }
  76.  
  77. public interface IItemActionListener {
  78.     void onClick(int itemPosition);
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement