Moataz
Moataz

Reputation: 657

How to send objects from adapter to activity

when i send some data it is give me this error java.lang.ArrayIndexOutOfBoundsException: length=15; index=-1, i dont know why . i tried to search and i didnot foung any thing related to this error.

my code

   @NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.book_items, parent, false);
    ViewHolder viewHolder = new ViewHolder(view);
    viewHolder.onClick.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(context, BookContentActivity.class);
            intent.putExtra("title",bookList.get(viewHolder.getAdapterPosition()).getTitle());
            intent.putExtra("author",bookList.get(viewHolder.getAdapterPosition()).getAuthor());
            intent.putExtra("details",bookList.get(viewHolder.getAdapterPosition()).getDetails());
            intent.putExtra("imageURL",bookList.get(viewHolder.getAdapterPosition()).getImgUrl());
            intent.putExtra("rating",bookList.get(viewHolder.getAdapterPosition()).getRating());
            intent.putExtra("pages",bookList.get(viewHolder.getAdapterPosition()).getPages());
            intent.putExtra("downloadUrl",bookList.get(viewHolder.getAdapterPosition()).getDownloadURL());

            context.startActivity(intent);
        }
    });
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

    holder.title.setText(this.bookList.get(position).getTitle());
    holder.author.setText(this.bookList.get(position).getAuthor());
    Glide.with(holder.itemView.getContext())
            .load(this.bookList.get(position).getImgUrl())
            .transforms(new CenterCrop(),new RoundedCorners(16))
            .into(holder.imageBook);

    holder.bookRating.setRating(this.bookList.get(position).getRating());
    holder.pages.setText(this.bookList.get(position).getPages());
}

Upvotes: 2

Views: 74

Answers (1)

Spectre
Spectre

Reputation: 66

The click listener should be added where you're binding the View to the ViewHolder object (onBindViewHolder). For getting the that object and launching your next activity though, passing a custom listener interface to get the clicked object with would be better. As the adapter shouldn't be responsible for launching activities via intents.

Hopefully that helps.

Upvotes: 2

Related Questions