GridView 行为怪异;重复文本视图

Posted

技术标签:

【中文标题】GridView 行为怪异;重复文本视图【英文标题】:GridView behaves weird; duplicates TextView 【发布时间】:2013-06-20 20:41:49 【问题描述】:

所以我得到了一个显示一些标志的 GridView。每个 GridView 单元由一个 ImageView 和一个 TextView 组成。开始时仅显示 ImageView。当 GridView 中的位置 1 和 240 加载时,TextView 应该变得可见。

    @Override
public View getView(int position, View convertView, ViewGroup parent) 
    ViewHolder mVHolder;

    if (convertView == null) 
        convertView = LayoutInflater.from(mContext).inflate(R.layout.grid_images, parent, false);
        mVHolder = new ViewHolder();
        mVHolder.mImageView = (ImageView) convertView.findViewById(R.id.gridview_img);
        mVHolder.mTextView = (TextView) convertView.findViewById(R.id.textas);
        mVHolder.mTextView.setVisibility(View.INVISIBLE);
        convertView.setTag(mVHolder);
     else 
        mVHolder = (ViewHolder) convertView.getTag();
    
    int img = Flagcontainer.flags.get(position).getFlagThumb();


    Picasso.with(mContext).load(img).into(mVHolder.mImageView);

    if (position == 1 || position == 240) 
        mVHolder.mTextView.setVisibility(View.VISIBLE);
    


    return convertView;


class ViewHolder 
    ImageView mImageView;
    TextView mTextView;

问题:

当一直滚动到 GridView 的底部时,将显示单元格 240 的 TextView。如果向上滚动,则会显示除 1 和 240 以外的其他单元格的 TextView。

我的代码有什么问题?

观看视频以可视化问题

视频: http://www.youtube.com/watch?v=ONLLvS9ISJQ

【问题讨论】:

【参考方案1】:

正如 el_bhm 指出的那样

if (position == 1 || position == 240) 
    mVHolder.mTextView.setVisibility(View.VISIBLE);

需要一个 else where mVHolder.mTextView.setVisibility(View.GONE);

【讨论】:

这是可见性。在创建或获取 ViewHolder 之后,需要在每个 getView 处设置它。在 ViewHolder 中再次查找视图部分违背了这种模式的目的,不是吗? @el_bhm 是的,我想念这个问题 谢谢大家!我不知道我是怎么错过的。

以上是关于GridView 行为怪异;重复文本视图的主要内容,如果未能解决你的问题,请参考以下文章

集合视图单元格的自动布局行为怪异

Sheet弹出视图在SwiftUI中“怪异”行为的解决(第一次弹出视图的可选属性总得到nil值)

Sheet弹出视图在SwiftUI中“怪异”行为的解决(第一次弹出视图的可选属性总得到nil值)

Javascript怪异日期行为于2017-03-26。一天不能增加。为什么? [重复]

估计HeightForHeaderInSection 行为怪异

gridview 验证中的文本框