Android ViewPager getChildCount返回零

Android ViewPager getChildCount返回零,android,android-layout,android-viewpager,Android,Android Layout,Android Viewpager,有人知道是什么原因导致viewPager.getChildCount()返回零吗?我在onCreate中查找了findViewById,在那里我还找到了viewPager.setAdapter和tabLayout.setupWithViewPager(viewPager)。然后在onResumeI中记录子计数,它是零!为什么呢 哦,顺便说一句,尽管getChildCount返回0,但ViewPager的布局显示没有问题 我的印象是,在调用viewPager.setAdapter(pagerAda

有人知道是什么原因导致
viewPager.getChildCount()
返回零吗?我在onCreate中查找了
findViewById
,在那里我还找到了
viewPager.setAdapter
tabLayout.setupWithViewPager(viewPager)
。然后在
onResume
I中记录子计数,它是零!为什么呢

哦,顺便说一句,尽管getChildCount返回0,但ViewPager的布局显示没有问题

我的印象是,在调用
viewPager.setAdapter(pagerAdapter)
之后,viewPager和pagerAdapter的计数相同。但显然这不是事实。那么为什么会发生这种情况呢

更新

你们提出了一些很好的观点。非常感谢。我的目标是遍历ViewPager/PagerAdapter中的所有片段。当我使用
getChildCount
时,它通常在意外的时间为0,但当它为非零时,一切正常

for(int i=0; i<viewPager.getChildCount(); i++){
   MyFragmentInterface frag = pagerAdapter.getRegisteredFragment(i);
   . . .  
}
回答

我好像已经把它修好了

for(int i=0; i<pagerAdapter.getCount(); i++){
  Fragment frag = pagerAdapter.getItem(i);
  . . .
}

for(int i=0;i据我所知,ViewPager没有实现此方法

ViewPager.getChildCount()==ViewGroup.getChildCount()

但正如你所看到的:

public abstract class ViewGroup extends View implements ViewParent, ViewManager {


// Number of valid children in the mChildren array, the rest should be null or not
// considered as children
private int mChildrenCount

/**
 * Returns the number of children in the group.
 *
 * @return a positive integer representing the number of children in
 *         the group
 */
public int getChildCount() {
    return mChildrenCount;
}
它返回一个mChildrencount-视图组子视图的计数**

简言之:

**这意味着任何子视图(与寻呼机的对象/项目不同)

进一步参见方法:

ViewPager.populate(int newCurrentItem)
ViewPager依赖于TabLayout-因此术语项是映射到视图pager适配器项的“TabLayout”选项卡(可以是片段或视图)

由于您可以向任何视图添加子视图-这与向其中添加视图寻呼机项不同-您可以有如下功能

        [   T1   ][   T2   ][   T3   ]   <- tab layout 
< -- >  |----------------------------|
pager   |[      pager item         ] |  < - fragment  as view pager item 
(view)  |----------------------------|
< -- >  |[   child view of pager    ]|  < - child view of pager 
当您填充此数组时??

@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0:
            return DogsFragment.newInstance();   <-   ?? **here** ?? 
第二件事是这个持有者的实例化??? [FRAGMENT_TITLES.length]??制作多大尺寸的数组

不要为此使用原始数组(当您添加新片段时,请提前考虑-因为新手尝试使用列表-在这个级别,它将为您节省寻找许多问题的解决方案的时间…)

我再说一遍,阅读有关接口的内容,特别是一个名为

 List

能否请您共享代码片段viewPager.getAdapter().getCount()你说得对!ViewPager没有实现该方法。但我在最近的一个项目中依赖它,它起了作用。这里可能有什么问题?是android版本吗?谢谢你的教育,朋友。+1。你知道如何解决迭代片段的问题吗?
。GetArrayOffFragments()
:这是我必须创建的方法吗?我已经更新了PagerAdapter代码。无论何时
getChildCount
可以工作,我都没有问题。@NouvelTravay-是的-我为你写的,我在心里读到:D Joke我正在检查这个答案,以便寻求帮助的人可能知道这里有一个答案:答案在帖子中/q争论
List<Fragment> fragments = some implementation of List interface;

Iterator<Fragment> iterator = fragments.iterator();
while(iterator.hasNext()) {

    Fragment fragment = iterator.next();
}
 // its only a hint how  - not solution - class need override methods from base class 
class MyAdapter extends BaseAdapter {

   private List<Items> _items;
   public List<Items> getItems() { return _items; }

   MyAdapter(List<Items> items)
     _items = items;
   }

}

// set 
ViewPager.setAdapter(new MyAdapter(listOfItems);
// retrieve 
Adapter  adapter = ViewPager.getAdapter();
if(adapter != null && MyAdapter.class.isAssignableFrom(adapter.getClass())  {
   // magic 
    MyAdapter myadapter = (MyAdapter) adapter; 
    List<Items>  myList = myAdapter.getItems()
}
/**
* Created by ceph3us on 03.09.2015.
*/
public interface IListAdapter<T> extends ListAdapter{
   void add(T listElement);
   void addAll(List<T> listOfElements);
   void clear();
   void remove(T listElement);
   void notifyDataSetChanged();
   T  getItem(int position);
   List<T> getList();
}
private Fragment registeredFragments[] = new Fragment[FRAGMENT_TITLES.length];
@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0:
            return DogsFragment.newInstance();   <-   ?? **here** ?? 
        case 0:
             // if my array contains this type of fragment return it 
             // else  make new one ??? and pack to this array ??? 
            return DogsFragment.newInstance();  
 List