当前位置: 首页 > 知识库问答 >
问题:

回收器内部滚动视图 - 如何滚动整个内容?

长孙逸仙
2023-03-14

我在Scrollview中有Recyclerview

 <Scrollview
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">

    <LinearLayout
        android:id="@+id/layoutStaticContent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

       //Static content.
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="100dp">
           .
           .
        <LinearLayout>

         //Dynamic content(newsfeed)
         <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>
 </ScrollView>

现在,滚动时,layoutStaticContent保持固定在顶部

共有3个答案

卫松
2023-03-14

一种可能的解决方法是只使用带有静态内容的RecyclerView作为您的RecycerView的标题。

那么布局就简单了:

//Dynamic content(newsfeed)
     <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

将有一个list_item_header。静态内容的xml布局:

//Static content.
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="100dp">
   .
   .
<LinearLayout>

您必须更改recyclerview适配器,使其包含:

private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;

@Override
public int getItemCount()
{
    int itemCount = super.getItemCount();
    if (mIsHeaderPresent)
    {
        itemCount += 1;
    }
    return itemCount;
}


@Override
public int getItemViewType(int position)
{
    if (mIsHeaderPresent && position == 0)
    {
        return TYPE_HEADER;
    }
    return TYPE_ITEM;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
    if (viewType == TYPE_HEADER)
    {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.list_item_header, parent, false);
        ViewHolderHeader viewHolder = new ViewHolderHeader(itemView);
        return viewHolder;
    } else if (viewType == TYPE_ITEM)
    {
        return getItemViewHolder(parent);
    }

    throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly");
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder passedViewHolder)
{
    if (mIsHeaderPresent && passedViewHolder instanceof ViewHolderHeader)
    {
        onBindHeaderViewHolder((ViewHolderHeader) passedViewHolder);
    } else
    {
        onBindItemViewHolder(passedViewHolder);
    }
}
鲁昕
2023-03-14

将包含静态和动态数据的LinearLayout放在一个NestedScrollView中,它会非常好用。

以下是您需要的代码:

<android.support.v4.widget.NestedScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<LinearLayout
    android:id="@+id/layoutStaticContent"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

   //Static content.
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="100dp">
       .
       .
    <LinearLayout>

     //Dynamic content(newsfeed)
     <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>
</android.support.v4.widget.NestedScrollView>

我希望它有帮助!

公孙俭
2023-03-14

使用Android.support.v4.widget.嵌套滚动视图,然后在两个布局内部嵌套滚动视图

 类似资料:
  • 在其他回收器视图中有一个回收器视图。两者都需要垂直滚动。外部回收器视图滚动正常,但内部回收器视图滚动不正常。 这是代码: ViewAdapter如下: 我尝试了以下两种回收商观点,但都无法解决问题 也尝试了这个:

  • 我在ViewPager中的NestedScrollView中有一个水平的RecyclerView。现在当我尝试滚动RecyclerView时,有时它滚动,但有时只有ViewPager滚动。 这就是我的RecyclerView XML的样子: 到目前为止,我所尝试的,正如你所看到的,我写了一个自定义的viewpager。我尝试告诉ViewPager,如果滚动来自RecyclerView,它就不能滚动

  • 我有一个水平回收视图。每个子级包含一个TextView和一个垂直RecyclerView。垂直RecyclerView的子级仅包含TextView。 垂直滚动非常平滑,但水平滚动滞后很多。我已经尝试在onBindViewHolder中使用swapAdapter,而不是setAdapter,但这并没有解决问题。我也尝试过更改数据集并调用notifyDataSetChanged(),但这也没有帮助。

  • 在我的一个活动中有一个父容器,它调用由一个水平scrollview组成的子容器作为对象之一。有点像recyclerview,其中放置了行对象,有一个由水平滚动视图组成的公共行/项布局。 我的目标是同步horizontalscrollview的位置,这样,当我在其中一个对象上从位置1水平滚动到位置2时,包含HorizonalScrollview的所有其他项目都会从位置1更新到位置2。 这是我的主容器

  • 我正在使用下面的代码创建一个回收器视图。recyclerview有一个网格布局管理器,其项计数最多为每行2个。 不幸的是,我嵌套在ConstraintLayout中的回收器视图根本没有滚动。我错过了什么?约束布局是否支持相同的?

  • 我有一个动态填充的RecyclerView。 当新消息到达时,我使用此代码向下滚动到最后一个条目: 现在的问题是:如果用户已经向上滚动阅读旧消息,它不应该向下滚动。怎么才能检测出来?