android - GrivView BaseAdapter 中的绝对位置

标签 android android-layout android-gridview android-adapter

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

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

渲染下一个元素时的位置是:

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显示效果很好。

我的问题是:

  • 使用 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/

相关文章:

Android:如何使用后退按钮开始设置 Activity

java - 将对象插入 SQLite DB 时出现 Null 异常

java - ImageButton 不会重叠在卡片 View 上,而是一个普通按钮//ImageButton 不与卡片 View 重叠,但按钮正常

java - Android GridView 与图像和文本

Android - GridView 的行为非常奇怪

android - 在 Activity 中模拟主页按钮行为

android - 为 Unity 3D 5.3 构建 Android 库时出错 - Android Studio

android - 如何在 android 中使用 Text Watcher 从 Recycler View 适配器获取编辑文本位置

android - 确定所呈现的软键盘的样式,平板电脑或手机样式

android - 如何与适配器类共享数组列表