[英]Click cardview in recyclerview from fragment in Android Studio
I`m creating a movie app for learning purposes. 我正在创建一个用于学习目的的电影应用程序。 I am have problem with clicking an cardview to direct me to another activity from fragment.
单击一个cardview导致我从片段中指向另一个活动时遇到问题。
Currently, I have the fragment which displays movies from api with retrofit. 目前,我有片段,通过改造显示来自api的电影。 the adapter to handle processing and an interface to for click event.
用于处理处理的适配器和用于单击事件的接口。
This is the adapter 这是适配器
public class MoviesAdapter extends RecyclerView.Adapter<MoviesAdapter.ViewHolder> {
private String IMAGE_BASE_URL = "https://image.tmdb.org/t/p/w500/";
private List<Movie> movieList;
private OnRecyclerViewItemClickListener onRecyclerViewItemClickListener;
public MoviesAdapter(List<Movie> movieList){
this.movieList = movieList;
}
@NonNull
@Override
public MoviesAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.movie_card, viewGroup, false);
return new MoviesAdapter.ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MoviesAdapter.ViewHolder movieViewHolder, int i) {
movieViewHolder.bind(movieList.get(i));
}
@Override
public int getItemCount() {
return movieList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
ImageView poster;
TextView movietitle, moviereleasedate, movierating;
LinearLayout linearLayout;
public ViewHolder(@NonNull View itemView) {
super(itemView);
poster = itemView.findViewById(R.id.cardview_image);
movietitle = itemView.findViewById(R.id.cardview_movietitle);
moviereleasedate = itemView.findViewById(R.id.cardview_releasedate);
movierating = itemView.findViewById(R.id.cardview_rating);
linearLayout = itemView.findViewById(R.id.movie_cardview_linearlayout);
}
public void bind(Movie movie){
movietitle.setText(movie.getTitle());
moviereleasedate.setText(movie.getReleaseDate().split("-")[0]);
movierating.setText(String.valueOf(movie.getRating()));
Picasso.get()
.load(IMAGE_BASE_URL+movie.getPosterPath())
.resize(96,128)
.placeholder(R.color.colorNotSelected)
.error(R.drawable.ic_launcher_foreground)
.into(poster);
linearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onRecyclerViewItemClickListener != null)
onRecyclerViewItemClickListener.onItemClick(getAdapterPosition(),v);
}
});
}
}
public void setOnRecyclerViewItemClickListener(OnRecyclerViewItemClickListener onRecyclerViewItemClickListener){
this.onRecyclerViewItemClickListener = onRecyclerViewItemClickListener;
}
}
Below is interface for click 下面是点击界面
public interface OnRecyclerViewItemClickListener {
void onItemClick(int adapterPosition, View view);
}
Below is fragment class 下面是片段类
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
final View view = inflater.inflate(R.layout.fragment_now_playing, container, false);
//Initialization of layout
ll = view.findViewById(R.id.movie_cardview_linearlayout);
recyclerView = view.findViewById(R.id.recyclerView_now_playing_fragment);
final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL,false);
recyclerView.setLayoutManager(linearLayoutManager);
//Getting retrofit client
final Service service = Client.getClient().create(Service.class);
Call<MoviesResponse> call = service.getNowPlayingMovies(BuildConfig.THE_MOVIE_DB_API_TOKEN);
//getting data
call.enqueue(new Callback<MoviesResponse>() {
@Override
public void onResponse(Call<MoviesResponse> call, Response<MoviesResponse> response) {
if (response.isSuccessful()){
List<Movie> movies = response.body().getMovies();
if (movies.size()>0){
final MoviesAdapter moviesAdapter = new MoviesAdapter(movies);
// Click does not work
// If I did it from activity I just put context of activity as an argument
moviesAdapter.setOnRecyclerViewItemClickListener(//);
recyclerView.setAdapter(moviesAdapter);
}
}
}
@Override
public void onFailure(Call<MoviesResponse> call, Throwable t) {
Log.e(TAG, "onFailure: ", t);
}
});
return view;
}
@Override
public void onItemClick(int adapterPosition, View view) {
switch (view.getId()){
case R.id.main_cardview:
Toast.makeText(getActivity(), "Card View Clicked", Toast.LENGTH_SHORT).show();
break;
}
}
}
I also click directly from cardview in fragment but it faild 我也直接从cardview中点击片段,但它会失败
It should give at least a toast as a test. 它应该至少提供一个吐司作为测试。
Thank you. 谢谢。
Please try this. 请试试这个。
@Override
public void onItemClick(int adapterPosition, View view) {
switch (view.getId()){
case R.id.movie_cardview_linearlayout:
Toast.makeText(getActivity(), "Card View Clicked", Toast.LENGTH_SHORT).show();
break;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.