Android 用RecyclerView替换ListView时注意到

Android 用RecyclerView替换ListView时注意到,android,android-recyclerview,gridlayoutmanager,Android,Android Recyclerview,Gridlayoutmanager,正在尝试将列表视图替换为回收视图。 不确定是否有人在使用RecyclerView时遇到问题。我注意到,在不更改视图项布局的情况下,使用RecyclerView时,滚动不如使用ListView时平滑,并且仅对我的视图项布局GridLayoutManager有效 有什么建议吗?谢谢 视图项布局没有更改,并且与ListView(具有>1000个数据)配合良好 使用列表视图: <ListView android:id="@+id/list_view" andr

正在尝试将
列表视图
替换为
回收视图
。 不确定是否有人在使用
RecyclerView
时遇到问题。我注意到,在不更改视图项布局的情况下,使用
RecyclerView
时,滚动不如使用
ListView
时平滑,并且仅对我的视图项布局
GridLayoutManager
有效

有什么建议吗?谢谢

视图项布局没有更改,并且与
ListView
(具有>1000个数据)配合良好

使用
列表视图

   <ListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>


public class UsingListViewAdapter extends BaseAdapter;

UsingListViewAdapter mAdaptor new UsingListViewAdapter(null, mSelectListener);
    mListView = (ListView) view.findViewById(R.id.list_view);
    mListView.setAdapter(mAdaptor);
<android.support.v7.widget.RecyclerView
        android:id="@+id/list_view"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent”/>

public class UsingRecyclerViewAdapter extends RecyclerView.Adapter< UsingRecyclerViewAdapter.RowViewHolder>
                                       implements View.OnClickListener, View.OnLongClickListener;


UsingRecyclerViewAdapter mAdaptor new UsingRecyclerViewAdapter(null, mSelectListener)
    mRecyclerView = (RecyclerView) view.findViewById(R.id.list_view);
    mRecyclerView.setHasFixedSize(true);

    mLayoutManager = new GridLayoutManager(getActivity(), 1); 
    //mLayoutManager = new LinearLayoutManager(getActivity());  

    mRecyclerView.setLayoutManager(mLayoutManager);
    mRecyclerView.setAdapter(mAdaptor);
ListView
RecyclerView
适配器中使用的视图项是相同的布局,其中一行有两个元素并排使用layout\u width=“0dp”/layout\u weight=“1”拉伸以填充该行

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="top" >

<LinearLayout
    android:id="@+id/row"
    android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"
android:orientation="horizontal"
android:visibility="gone"
    >
    <include
            android:id="@+id/row_cell_one"
            layout="@layout/cell_layout" 
            android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
        />
    <include
            android:id="@+id/row_cell_two"
            layout="@layout/cell_layout" 
            android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"/>
</LinearLayout>
  • 首先要注意的是,使用
    ListView
    的滚动比使用
    RecyclerView
    的滚动要平滑得多

  • 如果使用
    LinearLayoutManager
    ,则行中显示的项目会被弄乱。这两个项目不会占据显示的全部宽度,并且应该覆盖在其他元素顶部的元素(例如
    img.top==overlay\img.top
    )被放置在下面(例如
    overlay\u img.top==img.top+img.height
    ),并且在
    叠加\u img
    下方具有相同高度的空白

  • 只有在更改为使用
    mLayoutManager=newgridlayoutmanager(getActivity(),1);
    之后,行才会正确显示

    使用
    RecyclerView
    (使用
    LinearLayoutManager
    )它显示为:

    +---------------------+
    
    (cell | (cell  
     one) |  two)
    
    +---------------------+
    
    +---------------------+
    
    (cell one) | (cell two)
    
    +---------------------+
    
    使用
    ListView
    RecyclerView
    (使用
    GridLayoutManager
    )将其显示为:

    +---------------------+
    
    (cell | (cell  
     one) |  two)
    
    +---------------------+
    
    +---------------------+
    
    (cell one) | (cell two)
    
    +---------------------+
    

    当在Android os 4..4.2及以下版本的设备上运行时,在滚动时会感觉到不同,当在Nexus 5上运行棒棒糖时,会感觉到与使用ListView相同的平滑度。