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); } }
3 Réponses :
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); }
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.
Après que SetAdapter doit être appeler notifyDatastetchangeed
La vue doit être créée dans
ONCreateViewholder CODE> 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 code > Pour initier les vues de la mise en page. p>
xxx pré> blockQuote>
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); b>
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) b> 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
xml version = "1.0" coding = "utf-8"?> schemas.android.com/apk/res/andrroid " Android: id = "@ + id / fragment_container" android: layout_width = "match_parent" Android: Layout_height = "match_parent" />
xml version = "1.0" encoding = "utf-8"?> schemas.android.com/apk/res/andrroid " Android: Layout_width = "match_parent" Android: Layout_height = "Match_Parent "/>
xml version = "1.0" coding = "utf-8"?> 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