android - 在这个getView中初始化RelativeLayout,程序化 View 生成

标签 android getview convertview

我在适配器中使用 getView,我正在创建一个 imageview 并将其设置为等于之前已经初始化 View 的convertView。它包含图像缩略图,其中一些代表视频。

    @Override
    public View getView(int position, View convertView, ViewGroup container) {
        // First check if this is the top row

        if (position < mNumColumns) {
            if (convertView == null) {
                convertView = new View(mContext);
            }
            // Set empty view with height of ActionBar
            //convertView.setLayoutParams(new AbsListView.LayoutParams(
            //      LayoutParams.MATCH_PARENT, mActionBarHeight));
            return convertView;
        }

        // Now handle the main ImageView thumbnails
        ImageView imageView;
        if (convertView == null) { // if it's not recycled, instantiate and initialize
            imageView = new RecyclingImageView(mContext);
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setLayoutParams(mImageViewLayoutParams);
        } else { // Otherwise re-use the converted view
            imageView = (ImageView) convertView;
        }

        // Check the height matches our calculated column width
        if (imageView.getLayoutParams().height != mItemHeight) {
            imageView.setLayoutParams(mImageViewLayoutParams);
        }

        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

        if(images.get(position - mNumColumns).getUriString().contains("video")){
            //display video icon
        }
        else
        {
            //don't display video icon
        }

        // Finally load the image asynchronously into the ImageView, this also takes care of
        // setting a placeholder image while the background thread runs
        if (images != null && !images.isEmpty())
            mImageFetcher.loadImage(images.get(position - mNumColumns).getUriString()/*.imageUrls[position - mNumColumns]*/, imageView);
        return imageView;
    }

缩略图上没有“播放”按钮来指定它们是视频,因此在这种情况下,我需要以编程方式添加播放按钮。

通常我使用具有膨胀布局的 View 持有者模式,在这种情况下我不会这样做,因为我实际上不希望内存中存在某些内容。

因此,我想以编程方式将relativelayout作为每个单元格的 Root View (mRelativeLayout = (RelativeLayout)convertView),并将 ImageView 和播放按钮 ImageView 添加到该convertview中

我该怎么做?它需要修改此语句,但我不确定如何初始化所有重复使用的 View

   } else { // Otherwise re-use the converted view
            imageView = (ImageView) convertView;
        }

最佳答案

我认为这里最好的方法是使用返回不同类型 View 的适配器(通过覆盖 getViewTypeCount()getItemViewType() ),例如 this answer 中所述。 .

这样您就根本不需要以编程方式更改返回的 View 。只需定义两个 XML 布局,并根据该位置的项目是否有视频来扩展/重用其中之一。

这不仅会更清晰,而且每当将视频行作为 convertView 提供给另一个没有视频行的项目时,您就不会因为将一个 View “转换”为另一个 View 而遭受性能损失,或者反之亦然

关于android - 在这个getView中初始化RelativeLayout,程序化 View 生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26150161/

相关文章:

android - 支持 ICS 需要显式配置吗?

java - getView() int 每次加载都会加倍

android - 如何将 ListView 行中的 TextView 中的值放入 fragment

android - 如何使用字符串搜索将一个布局扩展到另一个布局

android - 带标签的 DialogFragment 显示无法正常工作

Android 在上传到市场时在应用程序中隐藏日志

android - 值更改时 EditText setOnKeyListener 不起作用

java - onActivityCreated/onStart/onViewCreated 方法中的 getView() 出现 NullPointerException 警告

android - picasso + convertView : what am I doing wrong here?

java - 我可以在独立项目中使用 android.os.* 库吗?