代码之家  ›  专栏  ›  技术社区  ›  TWiStErRob

单击RecyclerView列表项

  •  9
  • TWiStErRob  · 技术社区  · 9 年前

    我有一个 RecyclerView 用一个 LinearLayoutManager 和一个 Adapter :

    @Override public int getItemViewType(int position) {
        return position == 0? R.layout.header : R.layout.item;
    }
    

    这里是 header.xml :

    <View xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/header"
          android:layout_width="match_parent"
          android:layout_height="@dimen/header_height"
        />
    

    我想实现的是 回收者视图 在那里我可以点击 回收者视图 。我尝试了以下属性的大量组合,但没有效果:

          android:background="@android:color/transparent"
          android:background="@null"
          android:clickable="false"
          android:focusable="false"
          android:focusableInTouchMode="false"
          android:longClickable="false"
    

    我如何使列表中的第一个项目透明(允许触摸事件发生在它后面的任何东西),但让它仍然占据空间?

    1 回复  |  直到 9 年前
        1
  •  9
  •   TWiStErRob    9 年前

    您可以设置 OnClickListener / OnTouchListener 所有的“洞”的父视图 RecyclerView 并将 MotionEvent 并向该家长触摸事件 ViewGroup 的触摸处理。

    由TWiStErOb更新:

    class HeaderViewHolder extends RecyclerView.ViewHolder {
        public HeaderViewHolder(View view) {
            super(view);
            view.setOnTouchListener(new OnTouchListener() {
                @Override public boolean onTouch(View v, MotionEvent event) {
                    // http://stackoverflow.com/questions/8121491/is-it-possible-to-add-a-scrollable-textview-to-a-listview
                    v.getParent().requestDisallowInterceptTouchEvent(true); // needed for complex gestures
                    // simple tap works without the above line as well
                    return behindView.dispatchTouchEvent(event); // onTouchEvent won't work
                }
            });
    

    XML中没有什么特别需要的,只是简单的视图(问题中没有任何属性)。 v.getParent() 回收者视图 这种长方法可以阻止它在将手指放在“洞”上时开始滚动手势。

    我在列表中的“洞”视图也有半透明的背景,但这并不重要,因为我们是手动交付触摸。