Получение «Адаптер не подключен; пропускаем макет» при реализации нескольких макетов для повторного просмотра - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь использовать несколько видов для моего макета, но получаю эту ошибку: E / RecyclerView: адаптер не подключен;Пропуск макета.

Я пытался посмотреть другие решения здесь, на SO, а также в других местах.Раньше я использовал Firebase-UI, но из-за отсутствия решения для нескольких представлений я отказался от этого.Я переписывал этот код 5 раз и продолжаю получать ту же самую ошибку.

Вот мой фрагмент, откуда я вызываю адаптер:


@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        menuView = inflater.inflate(R.layout.fragment_menu, container, false);
        menuItemsArrayList = new ArrayList<>();
        bundle = getArguments();
        if (bundle != null && bundle.containsKey("restaurantId") && bundle.containsKey("restaurantPath")){
            setupRecyclerView();
            queryFirestore();
            loadMenuFirestore(menuQuery);
        }

        return menuView;
    }

    private void queryFirestore(){
        FirebaseFirestore db = FirebaseFirestore.getInstance();
        CollectionReference menuReference = db.collection("restaurantPath");
        menuQuery = menuReference.orderBy("levelCode", Query.Direction.ASCENDING);
    }

    private void loadMenuFirestore(Query query) {
        query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                for (DocumentSnapshot querySnapshot: task.getResult()){
                    MenuItems menuItems = new MenuItems(querySnapshot.getString("headerName"), querySnapshot.getString("levelCode"), querySnapshot.getString("menuItemDescription"), querySnapshot.getString("menuItemImage"), querySnapshot.getString("menuItemName"));
                    menuItemsArrayList.add(menuItems);
                }
                MenuItemAdapter menuItemAdapter = new MenuItemAdapter(menuContext, menuItemsArrayList);
                menuRecycler.setAdapter(menuItemAdapter);
            }
        });
    }


    private void setupRecyclerView() {

        menuRecycler = menuView.findViewById(R.id.menu_card_recycler);
        menuRecycler.setHasFixedSize(true);
        menuRecycler.setLayoutManager(new LinearLayoutManager(menuContext));
    }

А вот мой адаптер:

public class MenuItemAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

    ArrayList<MenuItems> menuItemsArrayList;
    Context adapterContext;
    private static final int TYPE_ONE = 1;
    private static final int TYPE_TWO = 2;

    // Constructor class
    public MenuItemAdapter(Context adapterContext, ArrayList<MenuItems> menuItemsArrayList) {
        this.adapterContext = adapterContext;
        this.menuItemsArrayList = menuItemsArrayList;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
        if (viewType == 1){
            View view = LayoutInflater.from(adapterContext).inflate(R.layout.menu_header, viewGroup, false);
            return new ViewHolderOne(view);
        } else {
            View view = LayoutInflater.from(adapterContext).inflate(R.layout.menu_item_card, viewGroup, false);
            return new ViewHolderTwo(view);
        }
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder menuRecyclerViewHolder, int i) {
        switch (menuRecyclerViewHolder.getItemViewType()){
            case TYPE_ONE:
                initLayoutOne((ViewHolderOne)menuRecyclerViewHolder, i);
                break;

            case TYPE_TWO:
                initLayoutTwo((ViewHolderTwo)menuRecyclerViewHolder, i);
                break;
        }
    }

    private void initLayoutOne(ViewHolderOne holder, int pos) {
        holder.tvHeaderName.setText(menuItemsArrayList.get(pos).getHeaderName());
    }

    private void initLayoutTwo(ViewHolderTwo holder, int pos) {
        holder.tvMenuItemName.setText(menuItemsArrayList.get(pos).getMenuItemName());
        holder.tvMenuItemDescription.setText(menuItemsArrayList.get(pos).getMenuItemDescription());
        Glide.with(adapterContext).load(menuItemsArrayList.get(pos).getMenuItemImage()).apply(new RequestOptions().override(400,200)).placeholder(R.drawable.menu_card_default).into(holder.ivMenuItemImage);

    }

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

    @Override
    public int getItemViewType(int position) {
        MenuItems menuItems = menuItemsArrayList.get(position);
        if(Integer.parseInt(menuItems.levelCode) % 2 != 0) {
            return TYPE_ONE;
        } else {
            return TYPE_TWO;
        }
    }

    // Static inner class to initialize the views of rows
    static class ViewHolderOne extends RecyclerView.ViewHolder {
        public TextView tvHeaderName;
        public ViewHolderOne(View itemView) {
            super(itemView);
            tvHeaderName = itemView.findViewById(R.id.section_name);
        }
    }

    static class ViewHolderTwo extends RecyclerView.ViewHolder {
        public TextView tvMenuItemName, tvMenuItemDescription;
        public ImageView ivMenuItemImage;

        public ViewHolderTwo(View itemView) {
            super(itemView);
            tvMenuItemName = itemView.findViewById(R.id.menu_item_name);
            tvMenuItemDescription = itemView.findViewById(R.id.menu_item_description);
            ivMenuItemImage = itemView.findViewById(R.id.image_menu_item);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...