Почему arraylist не показывается в обзоре переработчика? - PullRequest
0 голосов
/ 06 июля 2019

Я создал arraylist , используя цикл for, который создал 100 элементов в моем классе модели.Затем я попытался привязать эти данные к своему представлению переработчика с помощью адаптера, и по какой-то странной причине элементы не отображаются в представлении утилизатора.

Сначала я исследовал свой код переходника и просмотра утилизатора, чтобы убедиться в их правильности.реализовано, и я не заметил ничего необычного, что привело меня к выводу, что потенциально данные не создаются на самом деле.

Вот код:

    package com.demoapp.moester96.petheart.Models;

    import android.content.Context;

    import java.util.ArrayList;
    import java.util.List;
    import java.util.UUID;

    public class PetRecord {
        private static PetRecord sPetRecord;

        private List<Pet> mPets;

        public static PetRecord get(Context context)
        {
            if(sPetRecord == null)
            {
                sPetRecord = new PetRecord(context);
            }

            return sPetRecord;
        }

        private PetRecord(Context context)
        {
            mPets = new ArrayList<>();

            for(int i=0; i<100; ++i)
            {
                Pet pet = new Pet();
                pet.setmTitle("Pet #" + i);
                pet.setFaved(i % 2 == 0);
                mPets.add(pet);
            }
        }

        public List<Pet> getPets()
        {
            return mPets;
        }

        public Pet getPet(UUID id)
        {
            for(Pet pet : mPets)
            {
                if(pet.getmId().equals(id))
                {
                    return pet;
                }
            }

            return null;
        }

    }

    package com.demoapp.moester96.petheart;

    import android.os.Bundle;
    import android.support.annotation.NonNull;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    import com.demoapp.moester96.petheart.Models.Pet;
    import com.demoapp.moester96.petheart.Models.PetRecord;

    import java.util.List;

    public class PetListFragment extends Fragment {

        private class PetHolder extends RecyclerView.ViewHolder
        {
            private Pet mPet;
            private TextView mTitleTextView;
            private TextView mDateTextView;

            public PetHolder(LayoutInflater inflater, ViewGroup parent)
            {
                super(inflater.inflate(R.layout.list_item_pet,parent,false));

                mTitleTextView = (TextView) itemView.findViewById(R.id.pet_list_title);
                mDateTextView = (TextView) itemView.findViewById(R.id.pet_list_date);
            }

            public void bind(Pet pet)
            {
                mPet = pet;
                mTitleTextView.setText(mPet.getmTitle());
                mDateTextView.setText(mPet.getmDate().toString());
            }
        }

        private class PetAdapter extends RecyclerView.Adapter<PetHolder>
        {
            private List<Pet> mPets;

            public PetAdapter(List<Pet> pets)
            {
                mPets = pets;
            }

            @NonNull
            @Override
            public PetHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
                return new PetHolder(layoutInflater,parent);
            }

            @Override
            public void onBindViewHolder(@NonNull PetHolder petHolder, int i) {
                Pet pet = mPets.get(i);
                petHolder.bind(pet);
            }

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

        private RecyclerView mPetRecyclerView;
        private PetAdapter mAdapter;

        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
        }

        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.activity_pet_list,container,false);
            mPetRecyclerView = (RecyclerView) view.findViewById(R.id.pet_recycler_view);
            mPetRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
            updateUI();
            return view;
        }

        private void updateUI()
        {
            PetRecord petRecord = PetRecord.get(getActivity());
            List<Pet> pets = petRecord.getPets();

            mAdapter = new PetAdapter(pets);
            mPetRecyclerView.setAdapter(mAdapter);
        }
    }

Я ожидал получитьвместо списка из 100 предметов, которые включают номер питомца, дату и время в обзоре переработчика, я получил обзор переработчика, который абсолютно ничего не показал.

Ответы [ 3 ]

0 голосов
/ 06 июля 2019

после setAdapter должен быть вызов notifyDataSetChanged

    recyclerView = layout.findViewById(R.id.list_recyclerView);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL));
    ListAdapter adapter = new ListAdapter(getActivity());
    recyclerView.setAdapter(adapter);
    adapter.setList(searchList);
    adapter.notifyDataSetChanged();
0 голосов
/ 07 июля 2019

Представление должно быть создано в onCreateViewHolder и должно быть передано в класс держателя вида. Затем в вашем классе ViewHolder вы не создали представление, но использовали itemView для инициализации представлений макета.

public class PetListFragment extends Fragment {
   Context context;

   @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        this.context = context; 
        //this is one of the best way to get context of the activity to which the particular activity is associated with
      }
    private class PetHolder extends RecyclerView.ViewHolder
    {
        private Pet mPet;
        private TextView mTitleTextView;
        private TextView mDateTextView;

        public PetHolder(@NonNull View itemView)
        {
             super(itemView);
            mTitleTextView = (TextView) itemView.findViewById(R.id.pet_list_title);
            mDateTextView = (TextView) itemView.findViewById(R.id.pet_list_date);
        }

        public void bind(Pet pet)
        {
            mPet = pet;
            mTitleTextView.setText(mPet.getmTitle());
            mDateTextView.setText(mPet.getmDate().toString());
        }
    }

    private class PetAdapter extends RecyclerView.Adapter<PetHolder>
    {
        private List<Pet> mPets;
        private Context context;
        public PetAdapter(List<Pet> pets,Context context) 
        {
            this.context=context;
            mPets = pets;
        }

        @NonNull
        @Override
        public PetHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            LayoutInflater layoutInflater = LayoutInflater.from(context);
            View view=layoutInflater.inflate(R.layout.list_item_pet,parent,false);
            return new PetHolder(view);
        }

        @Override
        public void onBindViewHolder(@NonNull PetHolder petHolder, int i) {
            Pet pet = mPets.get(i);
            petHolder.bind(pet);
        }

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

    private RecyclerView mPetRecyclerView;
    private PetAdapter mAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_pet_list,container,false);
        mPetRecyclerView = (RecyclerView) view.findViewById(R.id.pet_recycler_view);
        mPetRecyclerView.setLayoutManager(new LinearLayoutManager(context));
        updateUI();
        return view;
    }

    private void updateUI()
    {
        PetRecord petRecord = PetRecord.get(context);
        List<Pet> pets = petRecord.getPets();

        mAdapter = new PetAdapter(pets,context);
        mPetRecyclerView.setAdapter(mAdapter);
    }
}

0 голосов
/ 06 июля 2019

Прежде всего, вы должны позвонить:

mPetRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

после установки адаптера, а не до.Вот как это работает.Кроме того, у вас есть файл .xml для дизайна элемента?Следует добавить его на адаптер, где вы говорите:

@NonNull
@Override
public PetHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    LayoutInflater layoutInflater = LayoutInflater.from(getContext();
    layoutInflater.inflate(R.layout.insert_your_design_element, parent,false);
    return new PetHolder(layoutInflater,parent);
}
...