RecyclerView error: No adapter attached; skipping layout? - android

I am fetching data from TMDB API.
I am getting
error:RecyclerView: No adapter attached; skipping layout
Right now, I am getting data via Retrofit.
Can anybody help me?
Adapter code is bellow:
public class ReviewAdapter extends RecyclerView.Adapter<MovieDetailActivity.MovieViewHolder> {
private List<Reviews> rReviewList;
private LayoutInflater rInflater;
private Context rContext;
public ReviewAdapter(Context context) {
this.rContext = context;
this.rInflater = LayoutInflater.from(context);
this.rReviewList = new ArrayList<>();
}
public MovieDetailActivity.MovieViewHolder onCreateViewHolder(ViewGroup parent, final int viewType) {
// create a new view
View view = rInflater.inflate(R.layout.row_review, parent, false);
return new MovieDetailActivity.MovieViewHolder(view);
}
#Override
public void onBindViewHolder(MovieDetailActivity.MovieViewHolder holder, int position) {
Reviews reviews = rReviewList.get(position);
Picasso.with(rContext)
.load(reviews.getUrl())
.into(holder.imageView);
holder.itemView.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
//Perform click
}
});
}
#Override
public int getItemCount() {
return rReviewList.size();
}
//To update data
public void setReviewList(List<Reviews> reviewsList) {
this.rReviewList = new ArrayList<>();
this.rReviewList.addAll(reviewsList);
notifyDataSetChanged();
}
}
MovieDetailsActivity is where I want to fetch review data
Its code is below:
public class MovieDetailActivity extends AppCompatActivity {
public static final String EXTRA_MOVIE = "EXTRA_MOVIE";
private Movie mMovie;
private Reviews mReviews;
private Genres mGenres;
public ReviewAdapter rAdapter;
//private MoviesAdapter.ReviewAdapter rAdapter;
ImageView backdrop;
ImageView poster;
TextView title;
TextView description;
TextView releaseDate;
TextView voteAverage;
RecyclerView reviews;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_movie_detail);
if (getIntent().hasExtra(EXTRA_MOVIE)) {
mMovie = getIntent().getParcelableExtra(EXTRA_MOVIE);
} else {
throw new IllegalArgumentException("Detail activity must receive a movie parcelable");
}
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
CollapsingToolbarLayout toolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.toolbar_layout);
toolbarLayout.setTitle(mMovie.getTitle());
//ucitavanje adaptera
reviews = (RecyclerView) findViewById(R.id.reviewList);
reviews.setAdapter(rAdapter);
rAdapter = new ReviewAdapter(MovieDetailActivity.this);
getReviews(mMovie.getId());
backdrop = (ImageView) findViewById(R.id.backdrop);
title = (TextView) findViewById(R.id.movie_title);
description = (TextView) findViewById(R.id.movie_description);
releaseDate = (TextView) findViewById(R.id.movie_date);
voteAverage = (TextView) findViewById(R.id.movie_rating);
//genres = (ListView) findViewById(R.id.genresArray);
title.setText(mMovie.getTitle());
description.setText(mMovie.getDescription());
voteAverage.setText(mMovie.getVoteAverage());
releaseDate.setText(mMovie.getReleaseDate());
poster = (ImageView) findViewById(R.id.movie_poster);
String internetUrl = "http://image.tmdb.org/t/p/w500";
Glide.with(this)
.load(mMovie.getPoster())
.override(800, 890)
.into(poster);
Glide.with(this)
.load(mMovie.getBackdrop())
.into(backdrop);
}
private void getReviews(String id) {
RestAdapter.getMovieService().getReviews(id, new Callback<ReviewWraper>() {
#Override
public void success(ReviewWraper reviewWraper, Response response) {
rAdapter.setReviewList(reviewWraper.getResults());
}
#Override
public void failure(RetrofitError error) {
error.printStackTrace();
}
});
}
public static class MovieViewHolder extends RecyclerView.ViewHolder {
public ImageView imageView;
public MovieViewHolder(View itemView) {
super(itemView);
imageView = (ImageView) itemView.findViewById(R.id.picture_review);
}
}
}

Add/edit this lines
reviews = (RecyclerView) findViewById(R.id.reviewList);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
reviews.setLayoutManager(mLayoutManager);
rAdapter = new ReviewAdapter(MovieDetailActivity.this);
reviews.setAdapter(rAdapter);

You must create the adapter, Use this:
rAdapter = new ReviewAdapter(MovieDetailActivity.this);
reviews.setAdapter(rAdapter);
Instead
reviews.setAdapter(rAdapter);
rAdapter = new ReviewAdapter(MovieDetailActivity.this);
Remember, your Recycler view requires a LayoutManager, something like this:
reviews.setLayoutManager(
new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));

Related

Cannot Implement View.onClickListener in Adapter class

ERROR:Class 'PersonViewHolder' must either be declared abstract or implement abstract method 'onClick(View)' in 'OnClickListener'
While running in emulator, The toast message is displayed but listener block seems to be not working. I already gone through numerous threads in stack overflow but couldn't find a solution
Adapter Class
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> {
private String pName;
private String pAge;
private Context context;
private List<Person> persons;
private OnItemClickListener listener;
public static class PersonViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
CardView cv;
TextView personName;
TextView personAge;
TextView personRegno;
TextView personOPno;
TextView personDocName;
TextView personGender;
ImageView personPhoto;
private OnItemClickListener listener;
PersonViewHolder(final View itemView) {
super(itemView);
cv = (CardView) itemView.findViewById(R.id.cv);
personName = (TextView) itemView.findViewById(R.id.person_name);
personAge = (TextView) itemView.findViewById(R.id.person_age);
personRegno = (TextView) itemView.findViewById(R.id.person_Reg_no);
personOPno = (TextView) itemView.findViewById(R.id.person_op_no);
personDocName = (TextView) itemView.findViewById(R.id.person_doctor_name);
personPhoto = (ImageView) itemView.findViewById(R.id.person_photo);
personGender = (TextView) itemView.findViewById(R.id.person_gender);
final Context context = itemView.getContext();
cv.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
// Toast.makeText(view.getContext(), "ithu thaan mudiyum", Toast.LENGTH_SHORT).show();
if(listener!=null)
listener.onItemClick(personName.getText().toString(),personAge.getText().toString());
}
});
}
}
public RVAdapter(Context context, List<Person> persons, String pName, String pAge) {
this.context = context;
this.pName = pName;
this.pAge = pAge;
this.persons = persons;
}
#Override
public PersonViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.cardview_item, null);
return new PersonViewHolder(view);
}
#Override
public void onBindViewHolder(PersonViewHolder holder, int position) {
//getting the product of the specified position
// Person persons = Person.get(position);
//binding the data with the viewholder views
holder.personName.setText(persons.get(position).getName());
holder.personAge.setText(persons.get(position).getAge());
holder.personRegno.setText(persons.get(position).getRegno());
holder.personOPno.setText(persons.get(position).getopno());
holder.personDocName.setText(persons.get(position).getDoctorname());
holder.personGender.setText(persons.get(position).getGender());
holder.personPhoto.setImageDrawable(context.getResources().getDrawable(persons.get(position).getImage()));
holder.setOnItemClickListener(listener);
}
#Override
public int getItemCount() {
return persons.size();
}
public void setOnItemClickListener(OnItemClickListener listener){
this.listener = listener;
}
public interface OnItemClickListener{
public void onItemClick(String personName, String personAge);
}
}
Recycler.java
public class Recycler extends Fragment {
public Recycler() {
}
List<Person> persons;
private String pName;
private String pAge;
RecyclerView rv;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootview = inflater.inflate(R.layout.recycler, container, false);
super.onCreate(savedInstanceState);
rv = (RecyclerView)rootview.findViewById(R.id.rv);
rv.setHasFixedSize(true);
rv.setLayoutManager(new LinearLayoutManager(getContext()));
persons = new ArrayList<>();
persons.add(
new Person("Vijay", "22", "Male", "RegNo:666", "Doctor:vishnu", "Opno:64446", R.drawable.ic_account_circle_black_18dp));
persons.add(
new Person("Vishnu", "23","Male", "RegNo:666", "Doctor:vishnu", "Opno:6666", R.drawable.ic_account_circle_black_18dp));
persons.add(
new Person("Vaishnavi sulochana", "24","Female", "RegNo:666", "Doctor:vishnu", "Opno:6666", R.drawable.ic_account_circle_black_18dp));
persons.add(
new Person("Ram", "25","Male", "RegNo:666", "Doctor:vishnu", "Opno:6666",R.drawable.ic_account_circle_black_18dp));
persons.add(
new Person("Raja", "21","Male","RegNo:666", "Doctor:vishnu", "Opno:6666", R.drawable.ic_account_circle_black_18dp));
persons.add(
new Person("Hari", "23", "Male","RegNo:666", "Doctor:vishnu", "Opno:6666",R.drawable.ic_account_circle_black_18dp));
persons.add(
new Person("Hari", "23", "Male","RegNo:666", "Doctor:vishnu", "Opno:6666",R.drawable.ic_account_circle_black_18dp));
//creating recyclerview adapter
//RVAdapter adapter = new RVAdapter(getContext(), persons);
RVAdapter adapter = new RVAdapter(getContext(),persons,pName,pAge);
adapter.setOnItemClickListener(new RVAdapter.OnItemClickListener(){
public void onItemClick(String textName, String textViewBrief){
ServiceTable eventFragment = new ServiceTable();
//replace content frame with your own view.
FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.main_container, eventFragment).commit();
}
});
//RVAdapter myAdapter = new RVAdapter(persons, this);
//setting adapter to recyclerview
rv.setAdapter(adapter);
return rootview;
}
}
This is my first time posting a question. so please ignore formatting issues.
You need to implement onClick method if you implement View.OnClickListener but in your case you set listener like below
cv.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
// Toast.makeText(view.getContext(), "ithu thaan mudiyum", Toast.LENGTH_SHORT).show();
if(listener!=null)
listener.onItemClick(personName.getText().toString(),personAge.getText().toString());
}
});
therefore you need to either delete implements View.OnClickListeneror override its onClick() method like below in your view holder class
#Override
public void onClick(View v) {
}

How i can add List of items to my RecyclerView adapter

in onLoadFinsih i get back from the server List of movies i want to
add this list to my RecyclerView adapter
i tried to create List of movies and pass it to my RecyclerView adapter
then when i get the list of movies from the server in onLoadFinish method i add
this list to the list that i passed in the adapter then notify the adapter
but not working
public class MainActivity extends AppCompatActivity
implements LoaderManager.LoaderCallbacks<List<Movie>>{
private RecyclerView.Adapter movieRecyclerViewAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private List<Movie> mListOfMovies;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
progressBar = (ProgressBar) findViewById(R.id.progress_bar);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mListOfMovies = new ArrayList<>();
movieRecyclerViewAdapter = new MovieItemAdapter(this, mListOfMovies);
mLayoutManager = new LinearLayoutManager(this);
recyclerView.setAdapter(movieRecyclerViewAdapter);
}
#Override
public void onLoadFinished(Loader<List<Movie>> loader, List<Movie> movies) {
//hide progress bar after fetch data from server
progressBar.setVisibility(View.GONE);
mListOfMovies.clear();
mListOfMovies.addAll(movies);
movieRecyclerViewAdapter.notifyItemRangeChanged();
}
public class MovieItemAdapter extends RecyclerView.Adapter<MovieItemAdapter.ViewHolder> {
private List<Movie> mListOfMovies;
private Context mContext;
public MovieItemAdapter(Context context, List<Movie> movies) {
this.mListOfMovies = movies;
this.mContext = context;
}
#Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext)
.inflate(R.layout.movie_list_item, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
#Override
public void onBindViewHolder(ViewHolder holder, int position) {
Movie movieItem = mListOfMovies.get(position);
holder.moviePoster.setImageBitmap(movieItem.getBitmap());
holder.movieName.setText(movieItem.getTitle());
DecimalFormat format = new DecimalFormat("0.0");
holder.voteAverage.setText(format.format(movieItem.getVoteAverage()));
holder.releaseDate.setText(movieItem.getReleaseDate());
}
#Override
public int getItemCount() {
return mListOfMovies.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public ImageView moviePoster;
public TextView movieName;
public TextView voteAverage;
public TextView releaseDate;
public ViewHolder(View itemView) {
super(itemView);
moviePoster = (ImageView) itemView.findViewById(R.id.movie_poster);
movieName = (TextView) itemView.findViewById(R.id.movie_name);
voteAverage = (TextView) itemView.findViewById(R.id.vote_average);
releaseDate = (TextView) itemView.findViewById(R.id.release_date);
}
}
}
In onLoadFinish() you should update the list in your adapter with the received data.
Then you should call the adapter's adapter.notifyDataSetChanged().
EDIT:
Create a method in adapter like
setMovieList(List<Movie> movies){
mListOfMovies = movies;
this.notifyDataSetChanged();
}
and call it from onLoadFinished():
movieRecyclerViewAdapter.setMovieList(mListOfMovies)
Make your ViewHolder class non static in adapter class. Then check again.

Unable to populate RecyclerView in Android

Full Code link : https://github.com/sudhishkr/Flicks/tree/feature/stackoverflow
I am trying to build a movie information display app. I am trying to use recyclerview and that seems to not load my data after a network call.
My MainActivity :
public class MainActivity extends AppCompatActivity {
TextView textView;
RecyclerView recyclerViewTheMovieDB;
RecyclerViewAdapter recyclerViewAdapterTheMovieDB;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerViewTheMovieDB = (RecyclerView) findViewById(R.id.recyclerViewTheMovieDB);
recyclerViewAdapterTheMovieDB = new RecyclerViewAdapter(getApplicationContext());
recyclerViewTheMovieDB.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
recyclerViewTheMovieDB.setAdapter(recyclerViewAdapterTheMovieDB);
textView = (TextView) findViewById(R.id.test2);
VolleyCallback callback = new VolleyCallback() {
#Override
public void onSuccessResponse(ArrayList<Movie> result) {
try {
recyclerViewAdapterTheMovieDB.setMovieList(result);
textView.setText(result.get(0).getTitle());
} catch (Exception e){
}
return;
}
};
final RequestQueue queue = Volley.newRequestQueue(this);
TheMovieDBApi theMovieDBApiObj = new TheMovieDBApi();
theMovieDBApiObj.getMovieList(queue, getApplicationContext(), callback);
}
}
My RecyclerViewAdapter :
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolderTheMovieDB>{
private ArrayList<Movie> listMovies = new ArrayList<>();
private LayoutInflater layoutInflater;
public void setMovieList(ArrayList<Movie> listMovies){
this.listMovies = listMovies;
notifyDataSetChanged();
notifyItemRangeChanged(0, listMovies.size());
}
public RecyclerViewAdapter(Context context){
layoutInflater = LayoutInflater.from(context);
}
#Override
public ViewHolderTheMovieDB onCreateViewHolder(ViewGroup parent, int viewType) {
View view = layoutInflater.inflate(R.layout.layout_inflater_themoviedb, parent, false);
ViewHolderTheMovieDB viewHolderTheMovieDB = new ViewHolderTheMovieDB(view);
return viewHolderTheMovieDB;
}
#Override
public void onBindViewHolder(ViewHolderTheMovieDB holder, int position) {
Movie currentMovie = listMovies.get(position);
try {
holder.title.setText(currentMovie.getTitle());
holder.overview.setText(currentMovie.getOverview());
} catch (JSONException e) {
e.printStackTrace();
}
}
#Override
public int getItemCount() {
return listMovies.size();
}
static class ViewHolderTheMovieDB extends RecyclerView.ViewHolder{
private TextView title;
private TextView overview;
public ViewHolderTheMovieDB(View itemView){
super(itemView);
title = (TextView) itemView.findViewById(R.id.textViewTitle);
overview = (TextView) itemView.findViewById(R.id.textViewOverview);
}
}
}
When I run this code - the notifyDataSetChanged or the notifyItemRangeChanged doesn't seem to fill the recycler view.
I am also setting my textview with the first item, and that seems to work. I am having a hard time trying to figure out what is going wrong with my RecyclerView. Any help/direction would be great.

Send data from CardView in RecyclerView to new fragment?

So I have a CardView in a RecyclerView which has some data inside it. I would like to click on a specific card and launch a new fragment that displays specific data from the data in the CardView (more details about the data in the CardView). Here is the relevant code.
I don't have the most experience in programming and Android in general, any help would be appreciated!
DetailsFragment: `
public class DetailsFragment extends Fragment {
private CardView cardView;
private RecyclerView rv;
private List<Detail> detailList = new ArrayList<>();
public DetailsFragment() {
}
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_details, container, false);
Context context = getActivity();
cardView = (CardView) rootView.findViewById(R.id.cv);
rv = (RecyclerView) rootView.findViewById(R.id.rv);
final LinearLayoutManager llm = new LinearLayoutManager(context);
rv.setLayoutManager(llm);
RVDetailAdapter adapter = new RVDetailAdapter(detailList);
rv.setAdapter(adapter);
initializeData();
initializeAdapter();
return rootView;
}
private void initializeData() {
detailList = new ArrayList<>();
// not sure here
detailList.add(new Detail(" "));
}
private void initializeAdapter(){
RVDetailAdapter adapter = new RVDetailAdapter(detailList);
rv.setAdapter(adapter);
}
}
RVNewsAdapater:
public class RVNewsAdapter extends RecyclerView.Adapter<RVNewsAdapter.NewsViewHolder> {
public static final String KEY_LINK ="link";
public static class NewsViewHolder extends RecyclerView.ViewHolder
implements View.OnClickListener {
private static final String TAG = "Hello";
CardView cv;
TextView date;
TextView link;
TextView title;
TextView today;
public NewsViewHolder(View itemView) {
super(itemView);
cv = (CardView) itemView.findViewById(R.id.cv);
date = (TextView) itemView.findViewById(R.id.date);
link = (TextView) itemView.findViewById(R.id.link);
title = (TextView) itemView.findViewById(R.id.heading);
today = (TextView) itemView.findViewById(R.id.today);
itemView.setOnClickListener(this);
}
#Override
public void onClick(View view) {
Context context = view.getContext();
Intent intent = null;
for(int postion = 0; postion<42; postion++) {
intent = new Intent(context, Details.class);
}
context.startActivity(intent);
}
}
List<News> news;
RVNewsAdapter(List<News> news) {
this.news = news;
}
#Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
#Override
public RVNewsAdapter.NewsViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.itemnewsfeed, viewGroup, false);
NewsViewHolder nvh = new NewsViewHolder(v);
return nvh;
}
#Override
public void onBindViewHolder(NewsViewHolder newsViewHolder, int i) {
newsViewHolder.date.setText(news.get(i).date);
newsViewHolder.link.setText(news.get(i).link);
newsViewHolder.title.setText(news.get(i).title);
newsViewHolder.today.setText(news.get(i).today);
}
#Override
public int getItemCount() {
if (news != null) {
return news.size();
}
return 0;
}
}
RVDetailAdapter:
public class RVDetailAdapter extends RecyclerView.Adapter<RVDetailAdapter.DetailViewHolder> {
public static class DetailViewHolder extends RecyclerView.ViewHolder {
TextView link;
public DetailViewHolder(View itemView) {
super(itemView);
link = (TextView) itemView.findViewById(R.id.link);
}
}
List<Detail> detail;
RVDetailAdapter(List<Detail> detail) {
this.detail = detail;
}
#Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
#Override
public RVDetailAdapter.DetailViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.itemnewsfeed, viewGroup, false);
DetailViewHolder dvh = new DetailViewHolder(v);
return dvh;
}
#Override
public void onBindViewHolder(DetailViewHolder detailViewHolder, int i) {
detailViewHolder.link.setText(detail.get(i).link);
}
#Override
public int getItemCount() {
if (detail != null) {
return detail.size();
}
return 0;
}
}
Not sure if you're still looking for an answer, but I just saw the post and thought I'd give you one option.
When I'm using a RecyclerView (doesn't matter if it's using the CardView or not, it's the same for any list item), I create a a click listener for the view item in the Adapter. When the user clicks the item/cardview, I dispatch an item click event. It's your choice on how you respond - you can use a standard callback interface (and pass in your listener when you create the adapter) or use something like EventBus.
Here's an example of the code you would add to your adapter class:
#Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false);
view.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
itemClick(view);
}
});
return new ViewHolder(view);
}
private void itemClick(View view) {
//Handle item event here
//EventBus.getDefault().post(new ItemSelectedEvent(/*send apprpopriate data*/));
}

RecyclerView not showing

I'm using RecyclerView with a custom Adapter but it's not showing data.
Adapter downloads some thumbnail images from database and get titles and infos from Api key.
Code of the Adapter Class:
public class mostViewedAdapter extends RecyclerView.Adapter<mostViewedAdapter.ViewHolder> {
private List<String> fTitle;
private List<String> fInfos;
private List<String> thumbs;
public mostViewedAdapter(List<String> titoli, List<String> infos, List<String>thumbsUrl){
fTitle = titoli;
fInfos = infos;
thumbs = thumbsUrl;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView titleTextView;
public TextView infoTextView;
public ImageView thumbImageView;
public ViewHolder(View itemView) {
super(itemView);
titleTextView = (TextView) itemView.findViewById(R.id.title);
infoTextView = (TextView) itemView.findViewById(R.id.infos);
thumbImageView = (ImageView) itemView.findViewById(R.id.thumb);
}
}
#Override
public mostViewedAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Context context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
View mvView = inflater.inflate(R.layout.most_viewed, parent, false);
ViewHolder viewHolder = new ViewHolder(mvView);
return viewHolder;
}
#Override
public void onBindViewHolder(mostViewedAdapter.ViewHolder holder, int position) {
String titolo = fTitle.get(position);
String info = fInfos.get(position);
String thumb = thumbs.get(position);
UrlGenerator url = new UrlGenerator(thumb);
Picasso.with(holder.thumbImageView.getContext()).load(url.generateImgUrl())
.resize(50,70).centerCrop().into(holder.thumbImageView);
holder.infoTextView.setText(info);
holder.titleTextView.setText(titolo);
TextView tvTitolo = holder.titleTextView;
TextView tvInfo = holder.infoTextView;
ImageView ivImage = holder.thumbImageView;
}
#Override
public int getItemCount() {
return 0;
}
}
Recycler view:
public void initUI() {
RecyclerView recList = (RecyclerView) findViewById(R.id.rvCinema);
recList.hasFixedSize();
mostViewedAdapter adapter = new mostViewedAdapter(titoli, info, thumbsUrl);
recList.setAdapter(adapter);
RecyclerView.LayoutManager lm = new LinearLayoutManager(this);
recList.setLayoutManager(lm);
}
try like this:
MainActivity
public class MainActivity extends AppCompatActivity {
RecyclerView mRecyclerView;
mostViewedAdapter mViewAdapter;
//.... other elements
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView_ID);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mRecyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
mViewAdapter= new mostViewedAdapter (listName, listInfo, listThumbs);
mRecyclerView.setAdapter(mViewAdapter);
}
}
Adapter Class
Instead of returning 0 as a count return the size of array of of any one of the three lists.
#Override
public int getItemCount() {
return fTitle.size();
//return fInfos.size();
//return thumbs.size();
}
Hope i helped, if still facing any issue, kindly post the logcat.
Please return fTitle.size();
#Override
public int getItemCount() {
return fTitle.size();
}

Categories

Resources