5

Próbuję użyć RecyclerView pokazać mój zestaw danych, starając się podążać tej stronie internetowej https://developer.android.com/training/material/lists-cards.htmlJak korzystać RecyclerView, próbując podążać developer.android.com sugestię, ale pojawia się błąd

Problem jest, że istnieje jakaś część źle i nie mogę się dowiedzieć, jak to naprawić, zrobiłem dokładnie to, co sugeruje ta witryna.

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 daje mi błąd:

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

Jak mam to zrobić?

Wygląda na to, że developer.android.com ma literówkę?

+0

Proszę dodać kod ViewHolder do swojego pytania. –

+0

gdzie jest twoja klasa 'ViewHolder'? – Rustam

+0

Dodano pełny kod, tak jak to było na tej stronie, więc wydaje się, że dostałem odpowiedź już, ale wydaje się, że jest literówka na stronie developer.android.com .. – EspeH

Odpowiedz

1

Po nadmuchaniu widoku zwykle warto utworzyć wystąpienie określonego rodzaju widoku, który nadpisujesz. W tym przypadku nadmuchujesz TextView. Ponieważ TextView rozciąga się od View, kompilator nie będzie narzekał na to, ale kiedy spróbujesz użyć View jako TextView Twoja aplikacja ulegnie awarii.

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

Zmień View do TextView.

1

Czy próbowałeś tego?

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

To pomoże rozwiązać problem, ale jest to odpowiedź @Glurt czy jest to bardziej odpowiedni sposób na zrobienie tego? – EspeH

+0

imho nie ma różnicy, kiedy rzucisz w tej sprawie swój widok. – mstrengis

+0

To była pierwsza odpowiedź i pomogła. Włączone, aby użyć odpowiedzi @Glurt – EspeH

0

Konstruktor w ViewHolder posiada TextView. Więc nie możesz wysłać widoku do ViewHolder. Spróbuj buforować widok do TextView w ten sposób.

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