尝试将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);
Adapter
和ListView
的{{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
首先注意的是,使用public RowViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
public void onBindViewHolder(RowViewHolder holder, int position)
public int getItemCount()
的滚动比使用ListView
要平滑得多。
如果使用RecyclerView
,则行中显示的项目会混乱。这两个项目不占据显示器的整个宽度,并且应该覆盖在其他元素之上的元素(例如LinearLayoutManager
)位于下方(例如img.top == overlay_img.top
),并且具有相同的白色高度overlay_img.top == img.top + img.height
下面的空格。
只有在更改为使用overlay_img
后才能正确显示该行。
mLayoutManager = new GridLayoutManager(getActivity(), 1);
(使用RecyclerView
)显示为:
LinearLayoutManager
使用+---------------------+
(cell | (cell
one) | two)
+---------------------+
和ListView
(使用RecyclerView
),它显示为:
GridLayoutManager