我正在尝试将 BaseAdapter 写入我的 GrivView 但在

public View getView(int position, View convertView, ViewGroup parent) { ... }

渲染下一个元素时的 position 是:
visible elements
---------------
|  1   2   3  |
|  4   5   6  | <--- screen
|  7   8   9  |
---------------

nonvisible elements
|  1   2   3  | <-- below visible area
|  4   5   6  |

真正的地方是:
visible elements
---------------
|  1   2   3  |
|  4   5   6  |
|  7   8   9  |
---------------

nonvisible elements
| 10  11  12  |
| 13  14  15  |

我知道这是正确的行为(它只计算可见元素),但是如何获得列表中项目的真实位置?或者如何知道我应该返回哪个布局?

编辑 :然而,返回的数字比我显示的要随机得多,即使在屏幕上也是如此。

最佳答案

使用 BaseAdapter 完全像 Google Documentatnion 显示效果很好。

我的 问题 是:

  • NOT 使用 ViewHolder
  • 或试图在 viewHolder
  • 中保存 id

    我应该使用 ViewHolder 如下:
    public View getView(int position, View convertView, ViewGroup parent) {
        // create holder
        ViewHolder holder; // check if layout exists
    
        if (convertView == null) { // if it's not recycled, initialize some
    
            LayoutInflater inflater = LayoutInflater.from(mContext);
            convertView = (LinearLayout) inflater.inflate(R.layout.card_prev,
                    null);
    
            // Create layout elements
            ImageView image = (ImageView) convertView
                    .findViewById(R.id.imageViewThumbnail);
    
            TextView desc = (TextView) convertView
                    .findViewById(R.id.textViewDescription);
    
    
            // Place layout elements in holder
            holder = new ViewHolder();
            holder.id = position;
            holder.preview = image;
            holder.text = desc;
    
            convertView.setTag(holder);
        } else {
            // Get existing holder
            holder = (ViewHolder) convertView.getTag();
        }
    
        // Update layout here using layout elements from holder
        String imageName = "image_" + (position + 1);
        final int imageId = mContext.getResources().getIdentifier(imageName,
                "drawable", "com.myapp");
    
        holder.text.setText("" + (position+1));
    
        holder.preview.setImageResource(imageId);
    
        holder.preview.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                Intent fullScreenIntent = new Intent(v.getContext(),
                        FullScreenImage.class);
                fullScreenIntent.putExtra("imageRes", imageId);
    
                MainMenuActivity.currentShownActivity
                        .startActivity(fullScreenIntent);
    
            }
        });
    
        return convertView;
    }
    

    关于android - GrivView 的 BaseAdapter 中的绝对位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8314859/

    10-10 18:32