0

我想在回收站视图上启用投掷/快速滚动。我的意思是,如果用户执行甩动动作,视图会继续滚动并开始减速(我猜这称为快速滚动)。

我在 ScrollView 中有一个 RecyclerView

<ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/scroll">

    <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/items"/>

</ScrollView>

我将布局管理器设置为线性

    RecyclerView itemsView = findViewById(R.id.items);
    stocksView.setLayoutManager(new LinearLayoutManager(this));

我确实有一个自定义适配器附加到 RecyclerView

public abstract class RecyclerAdapter<E>
        extends RecyclerView.Adapter<ItemView>
{
    private ItemTouchHelper touchHelper;

    protected final List<E> items = new ArrayList<>();

    protected RecyclerAdapter()
    {
    }

    @Override
    public void onBindViewHolder(@NonNull final ItemView holder, int position)
    {
    }

    @Override
    public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView)
    {
        super.onAttachedToRecyclerView(recyclerView);
        touchHelper = new ItemTouchHelper(new ItemTouchHelperCallback(this));
        touchHelper.attachToRecyclerView(recyclerView);
    }

    @Override
    public int getItemCount()
    {
        return items.size();
    }
}

我的 ItemTouchHelperCallback 是

public class ItemTouchHelperCallback
        extends ItemTouchHelper.Callback
{
    ItemTouchHelperCallback(RecyclerAdapter adapter)
    {
    }

    @Override
    public boolean isItemViewSwipeEnabled()
    {
        return true;
    }

    @Override
    public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder)
    {
        int dragFlags  = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
        int swipeFlags = 0;
        return ItemTouchHelper.Callback.makeMovementFlags(dragFlags, swipeFlags);
    }

    @Override
    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder source, RecyclerView.ViewHolder target)
    {
        if (source.getItemViewType() != target.getItemViewType())
        {
            return false;
        }

        return true;
    }

    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int i)
    {
    }

    @Override
    public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState)
    {
        // We only want the active item to change
        if (actionState != ItemTouchHelper.ACTION_STATE_IDLE)
        {
            // Let the view holder know that this item is being moved or dragged
            ((ItemView) viewHolder).onItemSelected();
        }

        super.onSelectedChanged(viewHolder, actionState);
    }

    @Override
    public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder)
    {
        super.clearView(recyclerView, viewHolder);
        // Tell the view holder it's time to restore the idle state\
        ((ItemView) viewHolder).onItemClear();
    }
}

然而不知何故,每当我尝试滚动它时,我抬起手指的那一秒就停止了。我如何让它继续尝试滚动。

4

4 回答 4

1

从您的布局中删除ScrollView,并且不要wrap_content用于RecyclerView的高度。RecyclerView 本身已经提供了滚动功能,您可以使用layout_ScrollView 上的任何属性来使 RecyclerView 具有正确的大小。

于 2018-08-15T02:47:08.340 回答
0

你写了这个:

我在 ScrollView 中有一个 RecyclerView

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/scroll">

<android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/items"/>

RecyclerView已经支持 fling,ScrollView从 xml 文件中删除。并设置 RecyclerView 的高度match_parent,如下所示:

  <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/items"/>
于 2018-08-15T04:01:17.563 回答
0

使用滚动视图时,您需要关闭 nestedscroll 启用。

recyclerview.setNestedScrollingEnabled(false);
于 2018-08-15T04:57:51.423 回答
0

1- 将 ScrollView 更改为 NestedScrollView

2-app:layout_behavior="@string/appbar_scrolling_view_behavior"在 Recyclerview 和 NestedScrollView 中使用

<NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    android:id="@+id/scroll">

<android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:id="@+id/items"/>

3- 使用 recyclerview.setNestedScrollingEnabled(false);

于 2018-08-15T07:21:04.670 回答