java - Android GridView 获取子项不起作用

标签 java android gridview

我想获取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

我也尝试了这段代码,但返回项为空,它因 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() );
    }

你能帮我解决这个问题吗?这让我很困扰。

最佳答案

getChildAt() 返回 GridView 的 subview 。 subview 位置和数据位置不一样,因为 AdapterViews 回收并重用 subview 。这样,您就可以在适配器中拥有 100 个数据项,而在 gridview 中只有 7 个 subview 。

这是基础,你应该观看有关 listview 的 google IO 视频(他们描述的内容主要适用于所有 AdapterView)

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

关于java - Android GridView 获取子项不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21730934/

相关文章:

java - Jsoup如何查询html键/值对的值

java - Android如何多次调用一个方法并在它们之间有延迟

java - 使用 Gson 将单个 json 条目解析为多个对象

java - Grails 2.2.2 UrlMappings 测试(有异常)

android - textview不是从右到左虽然从右到左设备

android - xamarin ionic zip 解压缩导致错误

asp.net - 使用 GridView.RowDataBound 事件显示特定行

android - 在 Android 上,在 GridView 中显示来自文件的图像非常慢

html - Responsive Layout 收缩时布局、媒体查询和网格的问题

java - TestNG:从 eclipse 运行 xml 时重试有效,从命令行运行 xml 时无效