在android中添加项目之前,是否可能获得RecyclerView.Adapter子级的估计数?

在android中添加项目之前,是否可能获得RecyclerView.Adapter子级的估计数?,android,android-recyclerview,Android,Android Recyclerview,在android中添加项目之前,是否有可能获得RecyclerView.Adapter子项的估计值 我想要的是,在向适配器添加项目之前,我想估计适配器的子项计数,以便估计只能插入的可见项目 比如平板电脑 平板电脑可以有比手机更多的子视图 手机的孩子可能比平板电脑小 估计我可以向适配器添加多少子项或项(对于我的情况来说这是一个优势),以便在第一次将数据填充到适配器时可以看到它。这可能会起作用。它应该返回ViewHolder中所有可见的子视图。您还可以尝试将firstItem替换为0,将lastIt

在android中添加项目之前,是否有可能获得RecyclerView.Adapter子项的估计值

我想要的是,在向适配器添加项目之前,我想估计适配器的子项计数,以便估计只能插入的可见项目

比如平板电脑

  • 平板电脑可以有比手机更多的子视图
  • 手机的孩子可能比平板电脑小

  • 估计我可以向适配器添加多少子项或项(对于我的情况来说这是一个优势),以便在第一次将数据填充到适配器时可以看到它。

    这可能会起作用。它应该返回ViewHolder中所有可见的子视图。您还可以尝试将
    firstItem
    替换为
    0
    ,将
    lastItem
    替换为
    recyclerView.getAdapter().getItemCount()

    private static int getRecycleServiceHildCount(RecycleView RecycleView){
    //下面的部分有点笨拙,但是findFirstVisibleItem()等方法
    //仅适用于LinearLayoutManager及其子类。
    试试{
    LinearLayoutManager布局管理器=(LinearLayoutManager)recyclerView.getLayoutManager();
    }catch(ClassCastException e){
    抛出新的IllegalArgumentException(“LayoutManager的类型必须为”+LinearLayoutManager.class.getSimpleName());
    }
    final int firstItem=layoutManager.findFirstVisibleItemPositiob();
    final int lastItem=layoutManager.RecyclOverView.getLayoutManager().findLastVisibleItemPosition();
    int viewCount=0;
    对于(int i=firstItem;i
    你是什么意思?在构建适配器时,已经存在必须重写的方法。你还有别的事吗?我猜。。假设你有一个viewholder对象;InCreateViewHolder函数中的“获取父项权限…”。。从那你可以试着得到所有的孩子;不sure@PPartisan嗯,我的问题很模糊,在我的适配器中添加一些项目之前,我想先估计一下。我真正想要@PPartisan的是一个估计,我看到你得到findLastVisible,最后得到总数,但在我的情况下,我的适配器中还没有子项,所以我实际上想要一个估计。但问题是有可能吗?您可以通过以下方式估计在适配器中设置之前的子项数:-您正在以列表、数组或任何方式向适配器对象发送数据,您可以通过列表的大小或长度获得子项数array@david在那种情况下我有点困惑。你能在你的问题中加入一些示例代码来帮助你把问题形象化吗?如果您知道数据集的大小以及
    ViewHolder
    中的子对象的数量,那么这当然只是一个乘以另一个的例子。@PPartisan-hmm事实上这是一个很好的观点。这只是我如何用数学来表示它的问题,然后我可以推断出我可以填充的项目的数量。
    private static int getRecyclerViewChildCount(RecyclerView recyclerView) {
    
        //This below section is a bit clumsy, but the findFirstVisibleItem() etc. methods
        //Only apply to LinearLayoutManagers and their subclasses.
        try { 
            LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); 
        } catch (ClassCastException e) {
            throw new IllegalArgumentException("LayoutManager must be of type " + LinearLayoutManager.class.getSimpleName());
        }
    
        final int firstItem = layoutManager.findFirstVisibleItemPositiob();
        final int lastItem = layoutManager.recyclverView.getLayoutManager().findLastVisibleItemPosition();
    
        int viewCount = 0;
    
        for (int i = firstItem; i < lastItem; i++) {
            View view = recyclerView.findViewHolderForAdapterPosition(i).itemView;
            viewCount += view.getChildCount();
        }
    
        return viewCount;
    }