【发布时间】:2016-11-17 23:56:16
【问题描述】:
我正在尝试在 Android 上实现 onClick 侦听器。当我单击时,我需要从GridLayoutManager 获取一个特定项目的详细信息。 onClick 有效,但它列出了数组列表中的所有项目。
适配器类:
public class MoviesGridAdapter extends RecyclerView.Adapter<MoviesGridAdapter.PosterViewHolder> {
private Context context;
private List<Movies> movieItems = new ArrayList<>();
public MoviesGridAdapter(Context context, List<Movies> movieItems) {
this.context = context;
this.movieItems = movieItems;
}
@Override
public PosterViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.movies_poster_grid_view_item, parent, false);
return new PosterViewHolder(view);
}
@Override
public void onBindViewHolder(PosterViewHolder holder, int position) {
final Movies movies = movieItems.get(position);
String posterUrlPath = movies.getPosterPath();
Picasso.with(context)
.load(Constants.MOVIE_POSTER_URL + posterUrlPath).into(holder.poster);
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, MovieDetailsActivity.class);
intent.putExtra("Title", movies.getTitle());
intent.putExtra("Overview", movies.getOverview());
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return movieItems.size();
}
public class PosterViewHolder extends RecyclerView.ViewHolder {
ImageView poster;
final View mView;
public PosterViewHolder(View itemView) {
super(itemView);
mView = itemView;
poster = (ImageView) itemView.findViewById(R.id.movies_poster_mv);
}
}
public void setMovies(List<Movies> movies) {
movieItems.clear();
movieItems = movies;
notifyDataSetChanged();
}
}
我也在 ViewHolder 类上尝试过,它使用 API 中声明的 getAdapterPosition() 扩展了 RecyclerView.ViewHolder。我得到了另一个 Activity/Fragment 的意图,但我没有得到点击项目的位置,而是加载了整个列表。这是Github project link。 ListView 有 OnItemClickListner 或 ArrayAdapter,RecyclerView 缺少功能。
提前感谢您的所有帮助。
【问题讨论】:
-
向我们展示完整的代码,因为在视图持有者类中点击可以正常工作
-
更新了适配器类。
onClick有效,但是当我单击GridView中的图像时,我没有获得单个项目详细信息的位置@ -
放入最终电影 movies = movieItems.get(position); onClickListener 中的这些代码,因此位置无疑是相同的
标签: android android-recyclerview onclicklistener