RecyclerView在Grid不居中点击Item部分区域有效的解决方法

本文中RecyclerView的Adapter是复用的,当RecyclerView处于LinearLayoutManager布局时,点击item中的TextView有效,而RecyclerView处于GridLayoutManager时点击Item发现只有部分区域(显示文字的TextView)有效,原因是LinearLayoutManager占据了Item绝大部分区域,而GridLayoutManager布局时,显示文字的TextView占了Item区域很小一部分,所以点击无效。此时应该把用于接受点击事件的显示图标的TextView宽度设置为match_parent,然后设置其点击事件,而不是LinearLayoutManager时文字TextView设置的点击事件,这样就能响应点击事件了,关键代码如下:

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull List<Object> payloads) {
    super.onBindViewHolder(holder, position, payloads);
    RecyclerViewItemsData data = m_items.get(position);
    holder.m_itemTitle.setText(data.m_title);
    holder.m_itemImage.setText(data.m_image);

    if (R.layout.recycleview_grid_item == m_layout) {
        holder.m_itemImage.setOnClickListener(getOnClickListener(position));
    }

    if (R.layout.recycleview_linear_item == m_layout) {
        holder.m_itemTitle.setOnClickListener(getOnClickListener(position));
    }

    //如果布局里存在右箭头(二级菜单),则设置为font awesome字体,以显示为符号
    if (m_items.get(position).m_bShowArrow) {
        TextView arrowIcon = (TextView) m_itemView.findViewById(R.id.tv_arrow);
        if (null != arrowIcon) {
            arrowIcon.setTypeface(m_font);
        }
    } else {
        TextView arrowIcon = (TextView) m_itemView.findViewById(R.id.tv_arrow);
        if (null != arrowIcon) {
            arrowIcon.setVisibility(View.INVISIBLE);
            Log.d(TAG, "-- Lee -- " + m_items.get(position).m_title +
                    " arrow is show : " + m_items.get(position).m_bShowArrow);
        }
    }

    if (null != holder.m_tvInfo) {
        holder.m_tvInfo.setText(data.m_info);
    }

    ViewGroup.LayoutParams layoutParams = holder.itemView.getLayoutParams();
    if (null != layoutParams) {
        layoutParams.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
        holder.itemView.setLayoutParams(layoutParams);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值