Получить позицию и сведения о выбранном элементе из RecyclerView в классе адаптераAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Получить позицию и сведения о выбранном элементе из RecyclerView в классе адаптера

Сообщение Anonymous »

Я разрабатываю приложение для Android, в котором у меня есть RecyclerView, отображающий список фильмов. Каждый элемент в списке имеет значок, при нажатии на который открывается всплывающее меню с опциями для добавления фильма или просмотра его сведений. Я пытаюсь получить позицию выбранного элемента в RecyclerView и использовать эту позицию для получения таких деталей, как заголовок, дата, обзор и путь к плакату, из списка результатов.
Вот мой Класс RecyclerViewAdapter:

Код: Выделить всё

public class RecyclerViewAdapter extends RecyclerView.Adapter implements PopupMenu.OnMenuItemClickListener {

public ArrayList resultList;
public Context context;

public RecyclerViewAdapter(ArrayList list, Context context) {
this.resultList = list;
this.context = context;
}

public class ViewHolder extends RecyclerView.ViewHolder {

ImageView posterImage;
ImageView addIcon;
TextView movieName;
TextView date;
TextView overview;

public ViewHolder(@NonNull View itemView) {
super(itemView);

posterImage = itemView.findViewById(R.id.movie_poster);
addIcon = itemView.findViewById(R.id.addImage);
movieName = itemView.findViewById(R.id.movieNameText);
date = itemView.findViewById(R.id.dateText);
overview = itemView.findViewById(R.id.overviewText);

}
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.movie_list_2, parent, false);
return new ViewHolder(itemView);
}

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

if (position < getItemCount()) {
String title = resultList.get(position).getTitle();
String date = resultList.get(position).getRelease_date();
String overview = resultList.get(position).getOverview();
String posterPath = resultList.get(position).getPoster_path();

holder.movieName.setText(title);
holder.date.setText(date);
holder.overview.setText(overview);

if (posterPath == null) {
holder.posterImage.setImageDrawable(context.getDrawable(R.drawable.no_poster));
} else {
Glide.with(context).load(FeedActivity.BASE_PHOTO_URL + posterPath).into(holder.posterImage);
}

int finalPosition = position;
holder.addIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(context, "You clicked : "  + finalPosition, Toast.LENGTH_SHORT).show();

showPopup(v);
}
});
}
position++;
}

private void showPopup(View v) {

PopupMenu popup = new PopupMenu(context,v);
popup.setOnMenuItemClickListener(this);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.menu, popup.getMenu());
popup.show();

}

@Override
public boolean onMenuItemClick(MenuItem item) {

// Here I need to position of clicked item in Recyclerview, and I will get title, date etc.

int pos;

if(item.getItemId() == R.id.menuAdd){

// Find here to get position of clicked movie.
String title = resultList.get(pos).getTitle();
String date = resultList.get(pos).getRelease_date();
String overview = resultList.get(pos).getOverview();
String posterpath = resultList.get(pos).getPoster_path();

Intent intent1 = new Intent(context,ListActivity.class);
intent1.putExtra("title",title);
intent1.putExtra("date",date);
intent1.putExtra("overview",overview);
intent1.putExtra("posterpath",posterpath);
context.startActivity(intent1);
return true;

}
else if(item.getItemId() == R.id.menuShowDetails){

int movieId = resultList.get(pos).getMovieId();

Intent intent1 = new Intent(context, MovieDetails.class);
intent1.putExtra("movie_id",movieId);
context.startActivity(intent1);
return true;

}

return false;
}

@Override
public int getItemCount() {
return resultList.size();
}

}

Вопросы:
  • Как я могу правильно получить позицию элемента, по которому щелкнули, в RecyclerView из моего onMenuItemClick в классе RecyclerViewAdapter?
  • Есть ли лучший подход для обработки кликов по элементам и передачи сведений об элементе различным действиям при использовании PopupMenu внутри Адаптер RecyclerView?
Будем очень признательны за любые предложения и улучшения! Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/668 ... pter-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»