RecyclerView 不显示数据

Mar*_*tis 5 android android-support-library android-recyclerview

我有一个来自 23.2 支持库的 RecyclerView,它是一个 BottomSheet:

<android.support.v7.widget.RecyclerView
        android:id="@+id/bottom_sheet_multi_car"
        android:layout_width="match_parent"
        android:layout_height="@dimen/bottom_sheet_height"
        android:background="@color/background"
        app:layout_behavior="android.support.design.widget.BottomSheetBehavior"/>
Run Code Online (Sandbox Code Playgroud)

最初,我使用空数据集创建适配器:

    mMultiCarAdapter = new CarListRecyclerAdapter();
    bottomSheetMultiCar.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST));
    bottomSheetMultiCar.setLayoutManager(new LinearLayoutManager(getContext()));
    bottomSheetMultiCar.setAdapter(mMultiCarAdapter);
    ...

public static class CarListRecyclerAdapter extends RecyclerView.Adapter<CarListRecyclerAdapter.ViewHolder> {
    private List<Car> mCars = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

我有一种方法来替换我的数据:

    public void replaceItems(final List<Car> cars) {
        mCars.clear();
        mCars.addAll(cars);
        notifyDataSetChanged();
    }
Run Code Online (Sandbox Code Playgroud)

我展示了 RecyclerView:

private void showMultiCar(final List<Car> cars) {
    mBottomSheetMultiCarBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);

    mMultiCarAdapter.replaceItems(cars);
}
Run Code Online (Sandbox Code Playgroud)

在我显示 RecyclerView 后,它出现(我看到一个带有 RecyclerView 背景颜色的 BottomSheet)。但是,没有项目可见......直到我做一些动作。使 RecyclerView 显示项目的确认操作:

  • 我改变了其他视图的可见性;
  • 我点击 RecyclerView

我尝试了多种方法。

首先,在添加项目后更改 RecyclerView 的可见性,但似乎必须经过一段时间才能生效。

我尝试了几种方法:requestLayout,invalidate。

Mat*_*lly 2

recyclerView 需要是固定大小:

mRecyclerView.setHasFixedSize(true);
Run Code Online (Sandbox Code Playgroud)

花了太长时间才弄清楚这一点。不知道为什么它有效,但它确实有效。