简体   繁体   English

点击Android Studio中片段的recyclerview中的cardview

[英]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.

相关问题 通过在Android Studio中的CardView,Recyclerview Fragment中单击不同的卡来打开不同的活动 - Open different activities by clicking on different cards in CardView ,Recyclerview Fragment in Android studio 带有 CardView 和 Firebase 的片段中的 RecyclerView - RecyclerView in a Fragment with CardView and Firebase Android在RecyclerView中将数据从json显示到cardview - Android Displaying data from json to cardview in RecyclerView 如何使用 android studio 中的接口将值从 recyclerview 传递到片段 - how to pass value from recyclerview to a fragment using interfaces in android studio Android:将卡片视图从一个片段发送到另一个片段 - Android: Sending a cardview from one fragment to another RecyclerView中CardView上的onClickListener,由Activity中的片段中的片段创建 - onClickListener on a CardView in a RecyclerView created by a Fragment in a Fragment in an Activity 来自 php mysql 的带有 recyclerview、cardview 和 volley 的 Android 完整图像 - Android full image with recyclerview, cardview and volley from php mysql Android 从 php mysql 加载带有 recyclerview、cardview 和 volley 的完整图像 - Android load full image with recyclerview, cardview and volley from php mysql 如何在Android Studio中从活动到片段单击意图 - how to intent with on click button from activity to fragment in android studio Android cardView点击回调 - Android cardView click callback
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM