TrivialDriveJava/app/src/main/java/com/sample/android/trivialdrivesample/ui/MakePurchaseAdapter.java [37:146]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
public class MakePurchaseAdapter extends RecyclerView.Adapter<MakePurchaseAdapter.ViewHolder> {
    static public final int VIEW_TYPE_HEADER = 0;
    static public final int VIEW_TYPE_ITEM = 1;
    private final List<Item> inventoryList;
    private final MakePurchaseViewModel makePurchaseViewModel;
    private final MakePurchaseFragment makePurchaseFragment;

    public MakePurchaseAdapter(@NonNull List<Item> inventoryList,
                               @NonNull MakePurchaseViewModel makePurchaseViewModel,
                               @NonNull MakePurchaseFragment makePurchaseFragment) {
        this.inventoryList = inventoryList;
        this.makePurchaseViewModel = makePurchaseViewModel;
        this.makePurchaseFragment = makePurchaseFragment;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view;
        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        InventoryItemBinding inventoryItemBinding = null;
        InventoryHeaderBinding inventoryHeaderBinding = null;
        switch (viewType) {
            case VIEW_TYPE_HEADER:
                inventoryHeaderBinding = DataBindingUtil.inflate(layoutInflater, R.layout.inventory_header, parent,
                        false);
                view = inventoryHeaderBinding.getRoot();
                break;
            default: // VIEW_TYPE_ITEM
                inventoryItemBinding = DataBindingUtil.inflate(layoutInflater, R.layout.inventory_item, parent,
                        false);
                view = inventoryItemBinding.getRoot();
                break;
        }
        return new ViewHolder(view, viewType, inventoryHeaderBinding, inventoryItemBinding);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Item item = inventoryList.get(position);
        holder.bind(item, makePurchaseViewModel, makePurchaseFragment);
    }

    @Override
    public int getItemCount() {
        return inventoryList.size();
    }

    @Override
    public int getItemViewType(int position) {
        return inventoryList.get(position).viewType;
    }

    static class ViewHolder extends RecyclerView.ViewHolder {
        final InventoryHeaderBinding inventoryHeaderBinding;
        final InventoryItemBinding inventoryItemBinding;

        public ViewHolder(View v, int viewType, InventoryHeaderBinding inventoryHeaderBinding,
                          InventoryItemBinding inventoryItemBinding
        ) {
            super(v);
            this.inventoryHeaderBinding = inventoryHeaderBinding;
            this.inventoryItemBinding = inventoryItemBinding;
        }

        void bind(Item item,
                  MakePurchaseViewModel makePurchaseViewModel,
                  MakePurchaseFragment makePurchaseFragment) {
            switch (item.viewType) {
                case VIEW_TYPE_HEADER:
                    inventoryHeaderBinding.headerTitle.setText(item.getTitleOrSku());
                    inventoryHeaderBinding.headerTitle.setMovementMethod(LinkMovementMethod.getInstance());
                    inventoryHeaderBinding.setLifecycleOwner(makePurchaseFragment);
                    inventoryHeaderBinding.executePendingBindings();
                    break;
                default:
                    inventoryItemBinding.setSku(item.getTitleOrSku().toString());
                    inventoryItemBinding.setSkuDetails(
                            makePurchaseViewModel.getSkuDetails(item.getTitleOrSku().toString()));
                    inventoryItemBinding.skuTitle.setMovementMethod(LinkMovementMethod.getInstance());
                    inventoryItemBinding.setMakePurchaseFragment(makePurchaseFragment);
                    inventoryItemBinding.setLifecycleOwner(makePurchaseFragment);
                    inventoryItemBinding.executePendingBindings();
                    break;
            }
        }
    }

    /**
     * An item to be displayed in our RecyclerView. Each item contains a single string: either
     * the title of a header or a reference to a SKU, depending on what the type of the view is.
     */
    static class Item {
        public Item(@NonNull CharSequence titleOrSku, int viewType) {
            this.titleOrSku = titleOrSku;
            this.viewType = viewType;
        }

        public @NonNull
        CharSequence getTitleOrSku() {
            return titleOrSku;
        }

        public int getViewType() {
            return viewType;
        }

        private final @NonNull
        CharSequence titleOrSku;
        private final int viewType;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



TrivialDriveKotlin/app/src/main/java/com/sample/android/trivialdrivesample/ui/MakePurchaseAdapter.java [37:146]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
public class MakePurchaseAdapter extends RecyclerView.Adapter<MakePurchaseAdapter.ViewHolder> {
    static public final int VIEW_TYPE_HEADER = 0;
    static public final int VIEW_TYPE_ITEM = 1;
    private final List<Item> inventoryList;
    private final MakePurchaseViewModel makePurchaseViewModel;
    private final MakePurchaseFragment makePurchaseFragment;

    public MakePurchaseAdapter(@NonNull List<Item> inventoryList,
            @NonNull MakePurchaseViewModel makePurchaseViewModel,
            @NonNull MakePurchaseFragment makePurchaseFragment) {
        this.inventoryList = inventoryList;
        this.makePurchaseViewModel = makePurchaseViewModel;
        this.makePurchaseFragment = makePurchaseFragment;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view;
        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        InventoryItemBinding inventoryItemBinding = null;
        InventoryHeaderBinding inventoryHeaderBinding = null;
        switch (viewType) {
            case VIEW_TYPE_HEADER:
                inventoryHeaderBinding = DataBindingUtil.inflate(layoutInflater, R.layout.inventory_header, parent,
                        false);
                view = inventoryHeaderBinding.getRoot();
                break;
            default: // VIEW_TYPE_ITEM
                inventoryItemBinding = DataBindingUtil.inflate(layoutInflater, R.layout.inventory_item, parent,
                        false);
                view = inventoryItemBinding.getRoot();
                break;
        }
        return new ViewHolder(view, viewType, inventoryHeaderBinding, inventoryItemBinding);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Item item = inventoryList.get(position);
        holder.bind(item, makePurchaseViewModel, makePurchaseFragment);
    }

    @Override
    public int getItemCount() {
        return inventoryList.size();
    }

    @Override
    public int getItemViewType(int position) {
        return inventoryList.get(position).viewType;
    }

    static class ViewHolder extends RecyclerView.ViewHolder {
        final InventoryHeaderBinding inventoryHeaderBinding;
        final InventoryItemBinding inventoryItemBinding;

        public ViewHolder(View v, int viewType, InventoryHeaderBinding inventoryHeaderBinding,
                InventoryItemBinding inventoryItemBinding
        ) {
            super(v);
            this.inventoryHeaderBinding = inventoryHeaderBinding;
            this.inventoryItemBinding = inventoryItemBinding;
        }

        void bind(Item item,
                MakePurchaseViewModel makePurchaseViewModel,
                MakePurchaseFragment makePurchaseFragment) {
            switch (item.viewType) {
                case VIEW_TYPE_HEADER:
                    inventoryHeaderBinding.headerTitle.setText(item.getTitleOrSku());
                    inventoryHeaderBinding.headerTitle.setMovementMethod(LinkMovementMethod.getInstance());
                    inventoryHeaderBinding.setLifecycleOwner(makePurchaseFragment);
                    inventoryHeaderBinding.executePendingBindings();
                    break;
                default:
                    inventoryItemBinding.setSku(item.getTitleOrSku().toString());
                    inventoryItemBinding.setSkuDetails(
                            makePurchaseViewModel.getSkuDetails(item.getTitleOrSku().toString()));
                    inventoryItemBinding.skuTitle.setMovementMethod(LinkMovementMethod.getInstance());
                    inventoryItemBinding.setMakePurchaseFragment(makePurchaseFragment);
                    inventoryItemBinding.setLifecycleOwner(makePurchaseFragment);
                    inventoryItemBinding.executePendingBindings();
                    break;
            }
        }
    }

    /**
     * An item to be displayed in our RecyclerView. Each item contains a single string: either
     * the title of a header or a reference to a SKU, depending on what the type of the view is.
     */
    static class Item {
        public Item(@NonNull CharSequence titleOrSku, int viewType) {
            this.titleOrSku = titleOrSku;
            this.viewType = viewType;
        }

        public @NonNull
        CharSequence getTitleOrSku() {
            return titleOrSku;
        }

        public int getViewType() {
            return viewType;
        }

        private final @NonNull
        CharSequence titleOrSku;
        private final int viewType;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



