Toast消息onClick NOT SHOWING(RecycleView)

时间:2015-02-18 01:44:16

标签: android android-fragments android-recyclerview android-toast android-cardview

我试图在我的RecycleView上点击一个项目时显示一个toast msg,我尝试了很多例子, 但它没有给我任何东西。有人可以给我一个我可以遵循的不同的例子,最后我想设置onClick来显示一个新的片段。如果我能得到一个例子,它会很棒。 我使用这段代码:

public class MovieAdapter extends RecyclerView.Adapter<MovieAdapter.ViewHolder> {

    private List<Movie> movies;
    private int card_layout;
    private Context mContext;

    public MovieAdapter(List<Movie> movies, int card_layout, Context context) {

        this.movies = movies;
        this.card_layout = card_layout;
        this.mContext = context;
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        final View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(card_layout, viewGroup, false);
        return new ViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int i) {
        final Movie movie = movies.get(i);

        viewHolder.movieImage.setImageDrawable(mContext.getDrawable(movie.getImageResourceId(mContext)));
        viewHolder.movieName.setText(movie.mName);

        viewHolder.currentMovie = movie;

    }

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

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView movieName;
        public ImageView movieImage;
        public Movie currentMovie;


        public ViewHolder( View itemView) {
            super(itemView);
            movieName = (TextView) itemView.findViewById(R.id.movieName);
            movieImage = (ImageView)itemView.findViewById(R.id.movieImage);


            itemView.setOnClickListener(new View.OnClickListener(){
                @Override
            public void onClick(View itemView){
                    Toast.makeText(itemView.getContext(),currentMovie.mName,Toast.LENGTH_SHORT ).show();
                }
            });
        }

    }
}

我是否还必须在MainActivity中实现某些功能? 请不要生我的气,我只是这一切的开始。你所有的帮助都会得到满足。感谢

2 个答案:

答案 0 :(得分:2)

默认情况下,布局不可点击。要点击,请将setClickable添加到true

View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(
                                                 card_layout, viewGroup, false);
itemView.setClickable(true);
itemView.setFocusableInTouchMode(true);

答案 1 :(得分:0)

浪费一个小时后,我找到了解决此问题的最合适,最简单的方法:

尝试一下,绝对可以。无论卡片是否用在网格中。

RecyclerView适配器:

ProductCardRecyclerViewAdapter.java

public class ProductCardRecyclerViewAdapter extends RecyclerView.Adapter<ProductCardViewHolder> {

    public final String TAG=getClass().getSimpleName();
    Context context;
    private List<ProductEntry> productList;
    private Integer[] cardImages;
    String[] cardTitle;
    String[] cardSubtitle;

    public ProductCardRecyclerViewAdapter(Context context, Integer[] imageList, String[] cardTitle, String[] cardSubtitle) {
        this.cardImages = imageList;
        this.cardTitle = cardTitle;
        this.cardSubtitle = cardSubtitle;
        this.context = context;

    }

    @NonNull
    @Override
    public ProductCardViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.product_card, parent, false);

        return new ProductCardViewHolder(layoutView);
    }

    @Override
    public void onBindViewHolder(@NonNull ProductCardViewHolder holder, int position) {
        // TODO: Put Recycler ViewHolder Cards binding code here in MDC-102
        holder.imgCard.setImageResource(cardImages[position]);
        holder.productTitle.setText(cardTitle[position]);
        holder.productPrice.setText(cardSubtitle[position]);
        holder.productCard.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "onClick: Material Card clicked "+cardTitle[position]+" : "+context.getClass());

                //TODO: Perform card clicked working
                Context c = v.getContext();
                Toast.makeText(c, cardTitle[position], Toast.LENGTH_SHORT).show();
            }
        });

    }
    

    @Override
    public int getItemCount() {
        return cardImages.length;
    }
}

RecyclerViewHolder

ProductCardViewHolder.java


public class ProductCardViewHolder extends RecyclerView.ViewHolder  {

    CardView productCard;
    ImageView imgCard;
    public TextView productTitle;
    public TextView productPrice;

    public ProductCardViewHolder(@NonNull View itemView) {
        super(itemView);
        imgCard = itemView.findViewById(R.id.product_image);
        productTitle = itemView.findViewById(R.id.product_title);
        productPrice = itemView.findViewById(R.id.product_price);
        productCard=itemView.findViewById(R.id.cardofproducts);
        // TODO: Find and store views from itemView
    }


}

希望,将会有很大帮助。