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