0

Ich benutze die cardslib Bibliothek für Karten in meiner Android App. Es hat vordefinierte Kartenlayouts oder wir haben eine Option, das Layout anzupassen.Konnte keinen Adapter mit benutzerdefinierten Karten erstellen

Beim Erstellen des Adapters für die Recycler-Ansicht wird nur die Liste der Kartenobjekte mit vordefinierten Kartenlayouts akzeptiert. Ich erhalte einen Fehler, wenn ich versuche, dem Konstruktor eine Liste von benutzerdefinierten Karten zu übergeben.

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

Der obige Code zeigt einen Fehler. customCards ist die Liste der benutzerdefinierten Kartenobjekte. Wie kann ich es funktionieren lassen?

+0

Was ist der Fehler? –

+0

Fehler: (53, 127) Fehler: inkompatible Typen: Liste kann nicht in Liste konvertiert werden

Antwort

0

In Ihrem CardArrayRecyclerViewAdapter Änderung List<Card> zu List<CustomCard> im Konstruktor

+0

Das Problem ist 'CardArrayRecyclerViewAdapter' ist ein eingebauter Adapter in der Bibliothek. Darf ich es zwicken? –

+0

Dann müssen Sie 'List ' in den Adapter übergeben. Veröffentlichen Sie mehr von Ihrem Code, damit jemand eine Lösung finden kann. –

0

können Sie benutzerdefinierte Kartenadapter unten

  1. Kartenadapter Anruf wie

    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. kundenspezifische Adapter

    schreiben
    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. Anmerkung: CustomCard Modell ist & row_custom_card Layout xml where name Textview resde

0

Das zweite Argument für den Konstruktor CardArrayRecyclerViewAdapter muss sein Typ List<Card>. Ich weiß, es scheint wie List<CustomCard> sollte hier funktionieren, aber es wird nicht.

Es ist unmöglich zu sagen, was der beste Weg, dieses Problem zu lösen ist, ohne dass mehr Code zu sehen, aber man kann dies tun:

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

Sie können mehr über lesen, warum List<CustomCard> für das List<Card> Argument nicht akzeptiert wird hier Is List<Dog> a subclass of List<Animal>? Why aren't Java's generics implicitly polymorphic?

Verwandte Themen