【问题标题】:GridView doesn't contain all of adapterGridView 不包含所有适配器
【发布时间】:2015-05-10 02:09:21
【问题描述】:

我已经制作了 225 个视图的 GridView mGridView 和适配器 mAdapter,并将适配器设置为 GridView。我还制作了一个按钮,所以当我点击它时:

Log.d("mAdapter.getCount()","" + mAdapter.getCount());
Log.d("mGridView.getCount()",""+mGridView.getCount());
Log.d("mGridView.getChildCount()",""+mGridView.getChildCount());

结果如下:

D/mAdapter.getCount()﹕ 225
D/mGridView.getCount()﹕ 225
D/mGridView.getChildCount()﹕ 180

这对我来说是个问题,因为我需要从0224 使用mGridView.getChildAt(int position)。每当我使用mGridView.getChildAt(180).setBackgroundColor(Color.BLUE) 时,我都会收到此错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setBackgroundColor(int)' on a null object reference

说孩子是null。但我不知道如何解决这个问题,所以我可以访问 GridView 中的每个孩子。

【问题讨论】:

    标签: java android gridview android-arrayadapter


    【解决方案1】:

    mGridView.getChildCount() 将返回窗口中一次可见的视图数。假设我的 GridView 有 5 列并且一次只能显示 10 列,那么 mGridView.getChildCount() 将返回 50 (=5x10)

    如果您尝试使用 getChildCount API 在某个索引处修改视图的属性(例如 backgroundColor),您可能会使用 idxFirstVisiblePosition = mGridView.getFirstVisiblePosition() 检查第一个可见位置(例如 25),然后 (idxFirstVisiblePosition + childCount - 1) 将为您提供可以访问和更改当前可见窗口属性的最大子索引。

    【讨论】:

    • 所以没有办法改变不可见的孩子?
    • 为某些不可见的小部件更改 UI 有什么意义?您可以更改数据源或样式,小部件绑定到,并且当小部件即将显示时,它始终可以使用其数据甚至样式(例如您想要的背景颜色或字体)更新自己。你怎么看?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多