- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有谁知道什么可能导致 viewPager.getChildCount()
返回零?我在 onCreate 中执行了 findViewById
,并且我还执行了 viewPager.setAdapter
和 tabLayout.setupWithViewPager(viewPager)
。然后在 onResume
中我记录了 child 的数量,它是零!这是为什么?
哦,顺便说一句,尽管 getChildCount 返回 0,ViewPager 的布局显示没有问题。
我的印象是,在我调用 viewPager.setAdapter(pagerAdapter)
之后,ViewPager 和 PagerAdapter 将具有相同的计数。但显然那不是真的。那么,为什么会发生这种情况?
更新
你们提出了一些非常好的观点。谢谢。目标是我想遍历我的 ViewPager/PagerAdapter 中的所有 fragment 。当我使用 getChildCount
时,它通常在意想不到的时候为 0,但当它为非零时一切正常。
for(int i=0; i<viewPager.getChildCount(); i++){
MyFragmentInterface frag = pagerAdapter.getRegisteredFragment(i);
. . .
}
但是,当我使用 viewPager.getAdapter().getCount()
时,该值始终与 pagerAdapter.getCount()
相同。但我倾向于得到 NullPointerException,因为显然还没有 fragment 。
for(int i=0; i<viewPager.getAdapter().getCount(); i++){
MyFragmentInterface frag = pagerAdapter.getRegisteredFragment(i);
. . .
}
回答
我似乎已经修复了它
for(int i=0; i<pagerAdapter.getCount(); i++){
Fragment frag = pagerAdapter.getItem(i);
. . .
}
不再有 NullPointerException 或大小为 0
最佳答案
据我所知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;
}
它返回一个 mChildren 计数 - View 组 subview 的计数**
简而言之:
** 这意味着任何 subview (与寻呼机的对象/项目不同)
进一步查看方法:
ViewPager.populate(int newCurrentItem)
ViewPager 依赖于 TabLayout - 所以术语项目是映射到 View 寻呼机适配器项目(可以是 fragment 或 View )的“tablayout”选项卡
因为您可以向任何 View 添加 subview - 这与向其添加 View 寻呼机项目不同 - 您可以使用类似
[ T1 ][ T2 ][ T3 ] <- tab layout
< -- > |----------------------------|
pager |[ pager item ] | < - fragment as view pager item
(view) |----------------------------|
< -- > |[ child view of pager ]| < - child view of pager
Thanks for the education, friend. +1. Do you know how I might solve the problem of iterating through my fragments? – Nouvel Travay
迭代:??嗯,让我想想....
也许获取数组并迭代 ???
1) 通过循环 :)
List<Fragment> fragments = getAdapter().getArrayOfFragments();
for(Fragment fragment : fragments) {
String title = fragment.getTitle();
}
2) 或通过迭代器 :))
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()
}
附言。抱歉打字错误,我不懂英语,我是实时机器人 :D
TODO FOR YOU(今天)
然后尝试编写简单的类,它继承自其他类并实现一个 mhhh这个界面:
/**
* 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();
}
您有一个 holder [在 java 术语“定义”中] 用于 fragment 数组(原始)
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();
[FRAGMENT_TITLES.length] ??制作数组??什么尺寸 ???
不要为此使用原始数组(当你添加新 fragment 时要提前考虑 - 作为新手尝试使用列表 - 在这个级别它会节省你寻找许多问题解决方案的时间....
我再说一遍阅读关于接口(interface)的特别是关于一个命名的接口(interface)
List
关于android - ViewPager getChildCount 返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38492210/
我有一个带有一个静态 ImageView 的框架布局,其中随机放置其他 ImageView 。我想使用“getChildCount”来获取那些随机放置的ImageView的数量,但它也指的是静态的。我
有谁知道什么可能导致 viewPager.getChildCount() 返回零?我在 onCreate 中执行了 findViewById,并且我还执行了 viewPager.setAdapter
在我的 Activity 类中,我在 setContentView() 行之后有以下代码。 gridView = (GridView)findViewById(R.id.splitted_grid);
这个问题在这里已经有了答案: getChildCount() returns incorrect number of children (2 个答案) 关闭 5 年前。 我在 LinearLayou
我创建了一个包含动态 EditText 字段的 RecyclerView。当 EditText 字段中的值被编辑时,我需要通过单击按钮来保存它们。我正在使用 recyclerView.getChild
我创建了一个带有 X 按钮的自定义 TextView,单击该按钮时其可见性设置为 GONE。现在我想获取 LinearLayout 中可见的 TextViews 的数量。目前,我得到的是插入的 Tex
我正在尝试更改应用程序标题的字体。为此,我决定遍历工具栏,找到标题 TextView,然后设置字体。 Toolbar toolbar = (Toolbar) findViewById(R.id
我需要能够分辨 ListView 中的哪些项目是可见的。 onScroll 中的“visibleItemCount”项和listview.getChildCount这两个返回值通常比它们应该基于屏幕上
我从ArrayList(listaprac)填充Spinner(SpinnerPrac)。 Spinner 工作正常,但我想为最后一个元素setTextColor。 这是我的适配器 ArrayAda
我有一个 MainActivity 和一个我在 onCreate() 中设置的 ViewPager。 MainActivity 启动 CatActivity 获取结果。在 onActivityResu
如何统计gridview中的所有元素。比如我有一个gridview,里面有20个textview。启动程序时,我们只能看到,例如 10(因为屏幕小)。在这种情况下,如果我调用函数: System.ou
我正在编写一个 Java 树,其中树节点可能有需要很长时间计算的子节点(在这种情况下,它是一个文件系统,其中可能存在网络超时,阻止从附加的文件中获取文件列表驱动器)。 我发现的问题是: getChil
RecyclerView 有一个 InfiniteScrollListener 并且在该监听器内部,在 OnScrolled() 方法中我计算可见项和总项数以检查是否应加载新项。当totalItemC
我需要检查 ListView 上的所有元素以仅将标签设置为其中之一。我无法编辑数据库或适配器,我只想滚动 ListView 以执行检查并在 TextView 上设置字符串。 @Override pro
我正在尝试计算 RecyclerView 子项的数量。我试过这个: myRView.getChildCount(); 还有这个: LinearLayoutManager lm = ((LinearLa
我正在尝试为我的 Android 应用程序设置一些测试,并且我正在测试在数据库中创建的条目是否显示在我的 ListView 中。 这里是一些代码 fragment : mDbHelper.create
我想从 facebook 加载图像并填充到 ListView 中,我能够获取 friend 列表和他们的信息,但我想设置图像我正在获取 getChildCount() 0,请帮忙, public
ListView中的getCount()和getChildCount()有什么区别? 最佳答案 getCount() 会返回 Adapter 中的项目计数(列表中的总数),getChildCount(
本文整理了Java中com.thoughtworks.xstream.io.xml.xppdom.Xpp3Dom.getChildCount()方法的一些代码示例,展示了Xpp3Dom.getChil
我有一个带有两个选项卡的 TabActivity,显示两个列表。我使用 tabHost.getTabWidget().getChildCount() 来动态更改选项卡指示器。但是在启动应用程序时,ge
我是一名优秀的程序员,十分优秀!