【问题标题】:staggeredgridlayoutmanager don't show item after refresh in android在android中刷新后交错网格布局管理器不显示项目
【发布时间】:2016-08-17 16:03:40
【问题描述】:

在我的 RecyclerView 中,我使用 StaggeredLayoutManager 来显示项目,但是当使用 RefreshLAyout 刷新时,但稍后刷新不显示项目,直到在 recyclerview 中滚动,这是代码的一部分。

public class NotesListFragment extends Fragment
  implements SwipeRefreshLayout.OnRefreshListener, OnInternetListener, OnTapInternetDialogListener {

  private SwipeRefreshLayout notesListRefreshLayout = null;
  private ListRecyclerView notesListRecyclerView = null;
  private NotesAdapter notesAdapter = null;
  private List<Note> notes = null;

  public NotesListFragment() {
  // Required empty public constructor
  }

  public static NotesListFragment newInstance() {
    NotesListFragment fragment = new NotesListFragment();
    return fragment;
  }

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_notes_list, container, false);
  }

  @Override
  public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
  super.onViewCreated(view, savedInstanceState);
    notesListRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.notesListRefreshLayout);
    notesListRefreshLayout.setOnRefreshListener(this);
    notesListRecyclerView = (ListRecyclerView) view.findViewById(R.id.notesListRecyclerView);
    initObjects();
    showNotes(notes);
  }

  private void initObjects() {
    notesListRecyclerView.setHasFixedSize(true);
    if (isTablet) {
      if (((BaseActivityCompat) getActivity()).getOrientationDevice() == OrientationDevice.LANDSCAPE) {
        final StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
        notesListRecyclerView.setLayoutManager(manager);
        notesListRecyclerView.addItemDecoration(new SpaceGridDecoration(3, 20, true));
      } else {
        final StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
        notesListRecyclerView.setLayoutManager(manager);
        notesListRecyclerView.addItemDecoration(new SpaceGridDecoration(2, 20, true));
      }
    } else {
      final StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
      notesListRecyclerView.setLayoutManager(manager);
    }
  }

  private void showNotes(List<Note> notes) {
    if (notesAdapter == null) {
      notesAdapter = new NotesAdapter(getContext(), notes, advertising,
      advertisingList, (AppCompatActivity) getActivity(), AdvertisingSection.HOME.getSection());
      notesListRecyclerView.setAdapter(notesAdapter);
      notesAdapter.setOnNoteItemClickListener(onNoteItemClickListener);
      notesAdapter.setOnNoteActionClickListener(onNoteActionClickListener);
    } else {
      notesAdapter.setUpdate(true);
      notesAdapter.refreshAdapter(notes);
      notesListRecyclerView.setAdapter(notesAdapter);
    }
  }

  public void onRefresh() {
    obtainNotesHome(true);
  }
}

稍后使用 RefreshLayout 刷新实现显示空间 null 并且当我使用 staggeredlayoutmanager 在 recyclerview 中滚动项目时显示。

【问题讨论】:

    标签: android android-recyclerview layout-manager


    【解决方案1】:

    我认为您的代码没有问题。尝试使用占位符图像。它对我有用。

    【讨论】:

    • 这个片段在tabhostfragment中使用,当切换tab回到这个片段时,recyclerview不显示列表,如何在调试时丢失适配器,适配器存在于内存中,但不显示任何内容
    猜你喜欢
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    相关资源
    最近更新 更多