0

J'utilise la bibliothèque cardslib pour avoir des cartes dans mon application Android. Il a des dispositions de cartes prédéfinies ou nous avons une option pour personnaliser la mise en page. Lors de la création de l'adaptateur pour la vue Recycleur, seule la liste des objets de carte avec des dispositions de carte prédéfinies est acceptée. Je reçois une erreur lorsque j'essaie de transmettre une liste de cartes personnalisées au constructeur.Impossible de créer un adaptateur avec des cartes personnalisées

CardArrayRecyclerViewAdapter cardArrayRecyclerViewAdapter = new CardArrayRecyclerViewAdapter(getApplicationContext(), customCards); 

Le code ci-dessus montre une erreur. customCards est la liste des objets de carte personnalisés. Comment puis-je le faire fonctionner?

+0

Quelle est l'erreur? –

+0

Erreur: (53, 127) erreur: types incompatibles: Liste ne peut pas être converti en Liste

Répondre

0

Dans votre CardArrayRecyclerViewAdapter changement List<Card> à List<CustomCard> dans le constructeur

+0

Le problème est que 'CardArrayRecyclerViewAdapter' est un adaptateur intégré dans la bibliothèque. Suis-je autorisé à le modifier? –

+0

Ensuite, vous devez passer 'List ' dans l'adaptateur. Postez plus de votre code afin que quelqu'un puisse trouver une solution. –

0

vous pouvez écrire adaptateur de carte personnalisée ci-dessous

  1. adaptateur appel carte

    comme

    List<CustomCard> cardlist = new ArrayList<>(); 
    recyclerView.setHasFixedSize(true); 
    // recyclerView 
    recyclerView.setLayoutManager(new LinearLayoutManager(this)); 
    // create an Object for Adapter 
    CardDataAdapter mAdapter = new CardDataAdapter(cardlist); 
    // set the adapter object to the Recyclerview 
    recyclerView.setAdapter(mAdapter); 
    
  2. adaptateur personnalisé

    class CardDataAdapter extends RecyclerView.Adapter<CardDataAdapter.ViewHolder> { 
    
    private List<CustomCard> dataSet; 
    
    public CardDataAdapter(List<CustomCard> list) { 
    
        dataSet = list; 
    } 
    
    
    @Override 
    public CardDataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
        // create a new view 
        View itemLayoutView = LayoutInflater.from(viewGroup.getContext()).inflate(
          R.layout.row_custom_card, null); 
    
        itemLayoutView.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT)); 
    
        // create ViewHolder 
    
        CardDataAdapter.ViewHolder viewHolder = new CardDataAdapter.ViewHolder(itemLayoutView); 
    
        return viewHolder; 
    } 
    
    
    @Override 
    public void onBindViewHolder(CardDataAdapter.ViewHolder viewHolder, int i) { 
    
        CustomCard fp = dataSet.get(i); 
    
        viewHolder.tv_title.setText(fp.getName()); 
    
    
        viewHolder.feed = fp; 
    } 
    
    @Override 
    public int getItemCount() { 
    
        return dataSet.size(); 
    } 
    
    // inner class to hold a reference to each item of RecyclerView 
    public class ViewHolder extends RecyclerView.ViewHolder { 
    
        public TextView tv_title; 
    
        public NotificationModel feed; 
    
        public ViewHolder(View itemLayoutView) { 
         super(itemLayoutView); 
    
         tv_title = (TextView) itemLayoutView .findViewById(R.id.tv_title); 
         itemLayoutView.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 
    
           //Write here 
    
          } 
         }); 
    
    
    
         } 
    
        } 
    } 
    
  3. Note: CustomCard est modèle & mise en page de row_custom_card xml où le nom Textview resde

0

Le deuxième argument du constructeur CardArrayRecyclerViewAdapter doit être de type List<Card>. Je sais qu'il semble que List<CustomCard> devrait fonctionner ici, mais ce ne sera pas le cas.

Il est impossible de dire quelle est la meilleure façon de résoudre ce problème est sans voir plus de code, mais vous pouvez le faire:

List<Card> cards = new ArrayList<>(); 
cards.addAll(customCards); 
// now call constructor with `cards` instead of `customCards` 

Vous pouvez en savoir plus sur pourquoi List<CustomCard> n'est pas accepté l'argument List<Card> ici Is List<Dog> a subclass of List<Animal>? Why aren't Java's generics implicitly polymorphic?