【问题标题】:Toast message onClick NOT SHOWING (RecycleView)Toast 消息 onClick NOT SHOWING (RecycleView)
【发布时间】:2015-04-18 22:05:10
【问题描述】:

当我点击我的 RecycleView 中的一个项目时,我尝试显示一个 toast 消息,我尝试了很多示例, 但它没有给我任何东西。有人可以给我一个我可以遵循的不同示例,最后我想设置 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 中实现一些东西? 请不要生我的气,我只是这一切的开始。您的所有帮助都将得到回报。谢谢

【问题讨论】:

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


    【解决方案1】:

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

    试试这个,肯定行得通。不管卡片是否用在网格中。

    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
        }
    
    
    }
    

    希望对你有很大帮助。

    【讨论】:

      【解决方案2】:

      默认情况下布局不可点击。使可点击添加 setClickabletrue

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

      【讨论】:

      • 它仍然没有显示 toast 消息。我是否需要更改布局中的某些内容?
      • @pirat4e: 那么可能ImageViewTextView 是可点击或可聚焦的,因此阻止所有子点击xml 或将OnClickListener 添加到ImageViewTextView
      • 非常感谢@ρяσѕρєя K,它现在可以工作了,我的 TextView 可以点击和聚焦。再次感谢
      猜你喜欢
      • 2013-12-08
      • 2022-12-26
      • 1970-01-01
      • 2022-12-02
      • 2022-11-09
      • 2022-12-01
      • 2022-12-27
      • 2022-12-27
      • 2011-07-15
      相关资源
      最近更新 更多