GridView不包含所有适配器

时间:2015-05-10 02:09:21

标签: java android gridview android-arrayadapter

我创建了一个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

这对我来说是个问题,因为我需要使用mGridView.getChildAt(int position)0的{​​{1}}。每当我使用224时,我都会收到此错误:

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 。但我不知道如何解决这个问题,所以我可以访问GridView中的每个孩子。

1 个答案:

答案 0 :(得分:0)

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

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