0
votes

Pourquoi la flamberie n'est-elle pas affichée dans le recyclerview?

J'ai créé une arrayliste forte> en utilisant une boucle pour créer 100 éléments dans ma classe modèle. J'ai ensuite essayé de lier ces données à mon recyclerview à l'aide d'un adaptateur et d'une raison d'étrange, les éléments ne sont pas affichés dans le recyclerview.

J'ai d'abord enquêté sur mon adaptateur et Recyclerview Code pour vous assurer qu'ils étaient correctement mis en œuvre et je n'a rien remarqué de l'ordinaire qui m'a amené à conclure que les données ne sont pas réellement créées. P>

Voici le code: p>

    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);
        }
    }


13 commentaires

Je ne sais pas si tel est le cas, mais pouvez-vous mettre à jour votre ligne dans laquelle vous définissez votre licyoutManager sur cette MPETRecyClerView.setlayOntManager (New LinearlayoutOutManager (getActivity (), recyclerview.vertical);


Yah qui malheureusement ne fonctionnait pas cela m'a donné une erreur disant ne peut pas résoudre le constructeur linéarlayoutmanager


Juste au cas où, pourriez-vous également publier la mise en page de votre article et votre présentation de fragments?


Ouais une erreur sur ma part nouvelle linearlayoutManager (getactivity (), recyclerview.vertical, false) est le constructeur approprié


Yah, il n'a toujours pas travaillé même avec la mise dans le constructeur et oui, je posterai des mises en page d'articles et de fragments pour vous


Pourriez-vous essayer de définir l'adaptateur surViewCreated au lieu d'ONCreateView


schemas.android.com/apk/res/andrroid " Android: id = "@ + id / fragment_container" android: layout_width = "match_parent" Android: Layout_height = "match_parent" />


schemas.android.com/apk/res/andrroid " Android: Layout_width = "match_parent" Android: Layout_height = "Match_Parent "/>


schemas.android.com/apk/res/andrroid " Android: Orientation = "Vertical" Android: Layout_width = "Match_Parent" Android: Layout_height = "Wrap_Content" Android: Padding = "8DP">



Ajoutez-vous le fragment à une activité?


vous savez ce que cela pourrait être le problème


pas de nvm je l'ai fait, je pensais peut-être que je n'ai pas fait


3 Réponses :


0
votes

Tout d'abord, vous devez appeler:

@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);
}


4 commentaires

J'ai placé le code XML dans la section de commentaire si vous souhaitez voir et vous remercier de votre aide.


Je reçois une erreur de type incompatible pour la ligne de layoutinflater


Séparez la création LayOUTInflater (renvoie layoutinflater) et la méthode de gonflage s'appelle elle-même (Vue de retour). LayoutAnflater Layouteinfler = layoutinflater.from (getContext (); layoutinflater.inflate (r.layout.inser_your_design_Element, parent, false);


J'ai séparé le code comme vous l'avez dit et malheureusement, les articles ne figurent toujours pas dans le recyclerview.



0
votes

Après que SetAdapter doit être appeler notifyDatastetchangeed xxx


0 commentaires

0
votes

La vue doit être créée dans ONCreateViewholder et doit être transmise à la classe de titulaire de la vue.Tren dans votre classe de visualisation, vous n'avez pas créé la vue mais que vous avez utilisé itemView Pour initier les vues de la mise en page. xxx


0 commentaires