0

试图从我创建和填充的 gridView 中获取特定位置项背后的数据。下面的侦听器方法 setOnItemClickListener() 效果很好,但我需要的是获取有关渲染屏幕(gridview)的信息,而不仅仅是在项目单击时。

这是从我的活动中截取的:

    ImageAdapter adapter = new ImageAdapter(LaunchActivity.this,
                myArray, elements);
        gridview.setAdapter(adapter);

        gridview.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v,
                    int position, long id) {

                ImageView iv = (ImageView) v.findViewById(R.id.icon_image);
                iv.setImageDrawable(getResources()
                        .getDrawable(R.drawable.drank));
                String name = elements[position].toString();
                System.out.println("===POSITION: " + position);
                if (dbHelper.getElementByPosition(position) == null) {
                    System.out.println("can insert");
                    dbHelper.addElement(new Beer(name, 1, position));
                } else {
                    System.out.println("already exists");
                }
            }
        });

        if (!elements.isEmpty()) {
            for (Element cn : elements) {
            Element item = (Element) gridview.getItemAtPosition(cn.getPosition());



                System.out.println(cn.getPosition() + ", ITEM: " + item);


}
        }

它继续返回null ...:

[2012-11-04 01:33:46 - Emulator] I/System.out( 1771): 7, ITEM: null
[2012-11-04 01:33:46 - Emulator] I/System.out( 1771): 3, ITEM: null
[2012-11-04 01:33:46 - Emulator] I/System.out( 1771): 11, ITEM: null
[2012-11-04 01:33:47 - Emulator] I/System.out( 1771): 14, ITEM: null
[2012-11-04 01:33:47 - Emulator] I/System.out( 1771): 12, ITEM: null

我不明白为什么我会出错......也许有人能发现我的错误,或者只是一个想法会很棒。谢谢!

4

1 回答 1

0

在 onCreate 期间,适配器尚未填满您的网格。你有几种可能性。其中之一是例如在 onStart 中使用延迟的可运行

 new Handler().runDelayed( Runnable, long ).

在这个可运行文件中,您的网格将被填充。

或者更好的是,在你的适配器上注册一个 datasetobserver,你就会知道你的网格何时被填满。

于 2012-11-03T23:46:40.070 回答