5

Sto cercando di utilizzare RecyclerView per mostrare il mio set di dati, cercando di seguire questo sito https://developer.android.com/training/material/lists-cards.htmlCome usare RecyclerView, cercando di seguire developer.android.com suggerimento, ma ottenere errore

Il problema è che v'è una certa parte sbagliato e non riesco a scoprire come risolverlo, ho fatto esattamente come suggerire quel sito.

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 
    private String[] mDataset; 

    // Provide a reference to the views for each data item 
    // Complex data items may need more than one view per item, and 
    // you provide access to all the views for a data item in a view holder 
    public static class ViewHolder extends RecyclerView.ViewHolder { 
     // each data item is just a string in this case 
     public TextView mTextView; 
     public ViewHolder(TextView v) { 
      super(v); 
      mTextView = v; 
     } 
    } 

    // Provide a suitable constructor (depends on the kind of dataset) 
    public MyAdapter(String[] myDataset) { 
     mDataset = myDataset; 
    } 

    // Create new views (invoked by the layout manager) 
    @Override 
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, 
               int viewType) { 
     // create a new view 
     View v = LayoutInflater.from(parent.getContext()) 
          .inflate(R.layout.my_text_view, parent, false); 
     // set the view's size, margins, paddings and layout parameters 
     ... 
     ViewHolder vh = new ViewHolder(v);  // ERROR 
     return vh; 
    } 

    // Replace the contents of a view (invoked by the layout manager) 
    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     // - get element from your dataset at this position 
     // - replace the contents of the view with that element 
     holder.mTextView.setText(mDataset[position]); 

    } 

    // Return the size of your dataset (invoked by the layout manager) 
    @Override 
    public int getItemCount() { 
     return mDataset.length; 
    } 
} 

Android Studio mi dà un errore:

ViewHolder (android.widget.TextView) in ViewHolder cannot be applied 
to   (android.view.View) 

Come devo fare questo?

Sembra developer.android.com avere qualche errore di battitura qui?

+0

Aggiungi il codice ViewHolder alla tua domanda. –

+0

dov'è la tua classe 'ViewHolder'? – Rustam

+0

Aggiunto il codice completo, come se fosse su quel sito, quindi sembra che ho già ricevuto la risposta, ma sembra che ci sia errore nel sito developer.android.com .. – EspeH

risposta

1

Quando si gonfiare una visione, di solito è una buona idea per creare un'istanza del tipo specifico di vista che si sta gonfiando. In questo caso stai gonfiando uno TextView. Dal TextView si estende da View il compilatore non si lamenterà, ma quando si tenta di utilizzare il View come TextView l'app si bloccherà.

// create a new view 
TextView v = (TextView) LayoutInflater.from(parent.getContext()) 
         .inflate(R.layout.my_text_view, parent, false); 

Change View-TextView.

1

Hai provato questo?

ViewHolder vh = new ViewHolder((TextView) v); 
+0

Questo aiuterà a risolvere il problema in realtà, ma è la risposta @Glurt è il modo più corretto per farlo? – EspeH

+0

imho non c'è nessuna differenza quando lanci la tua vista in questo caso – mstrengis

+0

Questa è stata la prima risposta e ha aiutato. Girato per usare la risposta @Glurt – EspeH

0

Il costruttore nel ViewHolder contiene TextView. Quindi non puoi inviare View a ViewHolder. Prova a mettere in cache la vista su TextView come questo.

ViewHolder vh = new ViewHolder((TextView)v);