【问题标题】:How to make RecycleView Clickable In a Fragment?如何使 RecyclerView 在片段中可点击?
【发布时间】:2015-08-19 14:32:35
【问题描述】:

我正在解析片段中的 Json 数据。为了查看这个 Json 数据,我使用了 RecycleView。在这个片段中,我展示了一些帖子的简短细节。我希望当用户单击 recycleView 时,它将转到另一个活动并显示此帖子的详细信息。如何让我的 RecycleView 可点击?

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_recent_post, container, false);
        recentpostRecycleView = (RecyclerView) view.findViewById(R.id.recent_posts);
        recentpostRecycleView.setLayoutManager(new LinearLayoutManager(getActivity()));
        recentPostAdapter = new RecentPostAdapter(getActivity());
        recentpostRecycleView.setAdapter(recentPostAdapter);
        sendJsonRequest();
        return  view;

    }  

我的 RecycleView 截图:

【问题讨论】:

    标签: android json android-fragments


    【解决方案1】:

    你不应该让 RecyclerView 可以点击,而是它的卡片。只需添加android:clickable="true" 到卡片布局,然后将 ClickListener 添加到 ChildViews。如果您对此感到困惑,slidenerd 有一个关于 RecyclerViews 的不错的教程:https://www.youtube.com/watch?v=zE1E1HOK_E4

    【讨论】:

      【解决方案2】:

      看看这个答案,我认为它最能描述: https://stackoverflow.com/a/24471410/5243853

      我目前正在使用类似的解决方案来处理对 RecycleView 项目的点击,但我在适配器的 onBindViewHolder 方法中设置了侦听器。此外,您不仅可以将 onClickListener 设置为整个项目视图,还可以根据需要设置其元素。

      在您的适配器实现中,您可以:

      @Override
          public void onBindViewHolder(ViewHolder viewHolder, int position) {
              Good good = getItem(position);
              Picasso.with(mContext)
                      .load(good.mainImages)
                      .placeholder(R.drawable.picasso_placeholder_normal)
                      .into(viewHolder.mImage, null);
              viewHolder.mTitle.setText(good.name);
              viewHolder.mCount.setText(good.count);
              viewHolder.parent.setOnClickListener(viewHolder); }
      

      适配器的内部类如下所示:

      class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
              private View parent;
              private ImageView mImage;
              private TextView mTitle;
              private TextView mCount;
      
              public ViewHolder(View parentView, ImageView image, TextView title, TextView count) {
                  super(parentView);
                  parent = parentView;
                  mImage = image;
                  mTitle = title;
                  mCount = count;
              }
      
              @Override
              public void onClick(View v) {
                  int position = getAdapterPosition();
                  Good good = getItem(position);
                  if (good != null) {
                      //requestProductCard(good.id, v);   //do your stuff here
                  }
              }
          }
      

      【讨论】:

      • 我从 slidenard 中找到了一个带有 addOnItemTouchListener 的解决方案。它允许添加 onLongTouch。不错。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      相关资源
      最近更新 更多