2014-02-12 77 views
2

我想獲取GridView子項,我使用下面的代碼,但它不起作用。Android 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 

我也試過這個代碼,但返回item爲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()); 
    } 

你能幫我解決這個問題嗎?它困擾了我很多。

回答

2

getChildAt()返回GridView的子視圖。兒童查看職位和您的數據職位不一樣,因爲AdapterViews回收和重用子視圖。這樣,您可以在適配器中擁有100項數據,並且在gridview中只有7個子視圖。

這是根本,你應該看有關ListView的谷歌IO視頻(它們所描述的東西,主要是那裏所有AdapterViews)

http://www.youtube.com/watch?v=wDBM6wVEO70

+0

如果是動態生成的項目,那麼如何獲得該項目的大小GridView的? – gladman