我想获取GridView子项,我使用下面的代码,但它不起作用。
mAppGridAdapter = new gridadapter(mContext, appPackageInfos);
mAppManaGridView.setAdapter(mAppGridAdapter);
if(mAppManaGridView.getCount()>0)
{
mAppManaGridView.setSelection(0);
Log.d("adan", "adan>" + mAppManaGridView.getCount());
Log.d("adan", mAppManaGridView.getFirstVisiblePosition() + ", " +mAppManaGridView.getLastVisiblePosition());
for(int visiblePosition = mAppManaGridView.getFirstVisiblePosition(); visiblePosition <= mAppManaGridView.getLastVisiblePosition(); visiblePosition++) {
View item = mAppManaGridView.getChildAt(visiblePosition);
// make something
Log.d("adan", "adan>" + item.getWidth()+"," +item.getHeight() );
}
}
显示的调试日志消息,它可以获取子计数,但它无法获取GridView的任何子项:
D/adan (11457): adan>165
D/adan (11457): 0, -1
我也试过这段代码,但是返回项为null,它与nullPointerException崩溃。
if(mAppManaGridView.getCount()>0)
{
mAppManaGridView.setSelection(0);
Log.d("adan", "adan>" + mAppManaGridView.getCount());
View item = mAppManaGridView.getChildAt(0);
// make something
Log.d("adan", "adan>" + item.getWidth()+"," +item.getHeight() );
}
你可以帮我解决这个问题吗?它让我很烦恼。
答案 0 :(得分:2)
getChildAt()返回GridView的子视图。子视图位置和数据位置不一样,因为AdapterViews可以回收和重用子视图。这样,您可以在适配器中包含100项数据,在gridview中只能包含7个子视图。
这是基本的,您应该观看关于listview的谷歌IO视频(他们描述的内容主要适用于所有AdapterViews)