用RecyclerView替换ListView时注意到了

时间:2015-01-16 18:19:45

标签: android android-recyclerview gridlayoutmanager

尝试将ListView替换为RecyclerView。 不确定是否有人使用RecyclerView也有问题。我注意到在不更改视图项目布局的情况下,使用RecyclerView滚动不像使用ListView那样流畅,而对于我的视图项目布局,只有GridLayoutManager有效。

有什么建议吗?谢谢!

视图项目布局未更改,并且ListView已正常工作(包含> 1000个数据)。

使用ListView

   <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);

RecyclerView

<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);

AdapterListView的{​​{1}}中使用的视图项是相同的布局,其中一行使用layout_width =“0dp”/ layout_weight =“并排有两个元素1“伸展以填充行。

RecyclerView

cell_layout类似于:

<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>

两者(使用<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <RelativeLayout android:id="@+id/img_container" android:layout_width="fill_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/img" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaleType="centerCrop" android:src="@drawable/dumy_img" /> <ImageView android:id="@+id/overlay_img" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_centerInParent="true" android:background="@drawable/box_border" android:scaleType="center" android:src="@drawable/overlay_image" android:tint="@color/dark_pink" android:visibility="gone" /> </RelativeLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="@dimen/padding_top" android:paddingBottom="@dimen/padding_bottom" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/left" android:layout_marginRight="@dimen/right" android:ellipsize="end" android:textSize="@dimen/text_size" android:gravity="left" android:singleLine="true" android:textColor="@color/black"/> <TextView android:id="@+id/text_2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/left" android:layout_marginRight="@dimen/right" android:ellipsize="end" android:textSize="@dimen/text_size" android:gravity="left" android:singleLine="true" android:textColor="@color/light_blue" /> </LinearLayout> ListView)都有类似的RecyclerView来更新Adapter, 除了View已实施

RecyclerView
  1. 首先注意的是,使用public RowViewHolder onCreateViewHolder(ViewGroup parent, int viewType) public void onBindViewHolder(RowViewHolder holder, int position) public int getItemCount() 的滚动比使用ListView要平滑得多。

  2. 如果使用RecyclerView,则行中显示的项目会混乱。这两个项目不占据显示器的整个宽度,并且应该覆盖在其他元素之上的元素(例如LinearLayoutManager)位于下方(例如img.top == overlay_img.top),并且具有相同的白色高度overlay_img.top == img.top + img.height下面的空格。

  3. 只有在更改为使用overlay_img后才能正确显示该行。

    mLayoutManager = new GridLayoutManager(getActivity(), 1);(使用RecyclerView)显示为:

    LinearLayoutManager

    使用+---------------------+ (cell | (cell one) | two) +---------------------+ ListView(使用RecyclerView),它显示为:

    GridLayoutManager

0 个答案:

没有答案