Android Gridview - 滚动时元素位置随机变化

标签 android android-gridview

我有一个 GridView,它有 10 行和 7 列。 GridView 中的元素不是唯一的形式,即一行包含 7 个元素,一行只有 4 或 5 个元素,等等。现在我创建了 GridView具有完整元素,即 70 个元素。现在我想在 GridView 中隐藏一些元素。我尝试将 ImageViewTextView 的可见性设置为 View.INVISIBLE。它可以工作,但是当我们滚动 GridView 时它会随机变化。

  1. This is exactly what I wanted

  2. 还有一个问题是每一行都包含一个标题,而不是每个元素。

我必须做什么?我是安卓新手。

代码:

@Override
public int getCount() 
{
    // TODO Auto-generated method stub
    return listFlag.size();
}

@Override
public String getItem(int position)
{
    // TODO Auto-generated method stub
    return listCountry.get(position);
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

public static class ViewHolder
{
    public ImageView imgViewFlag;
    public TextView txtViewTitle;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ViewHolder view;
    LayoutInflater inflator = activity.getLayoutInflater();
    int childSize = parent.getChildCount();
    if(convertView==null)
    {
        view = new ViewHolder();
        convertView = inflator.inflate(R.layout.gridview_row, null);
        view.txtViewTitle = (TextView) convertView.findViewById(R.id.textView1);
        view.imgViewFlag  = (ImageView) convertView.findViewById(R.id.imageView1);
        convertView.setTag(view);
    }
    else
    {
        view = (ViewHolder) convertView.getTag();
    }

    if(position==64||position==57||position==58||position==59||position==50||position==23||position==16||position==17||position==9||position==10||position==12||position==1||position==2||position==8)
    {
        view.txtViewTitle.setVisibility(View.GONE);
        view.imgViewFlag.setVisibility(View.GONE);
    }

    view.txtViewTitle.setText(listCountry.get(position));
    view.imgViewFlag.setImageResource(listFlag.get(position));

    return convertView;
}

}

最佳答案

问题在于代码中的 setVisibility 调用。

if(position==64||position==57||position==58||position==59||position==50||position==23||position==16||position==17||position==9||position==10||position==12||position==1||position==2||position==8)
{
    view.txtViewTitle.setVisibility(View.GONE);
    view.imgViewFlag.setVisibility(View.GONE);
}

当您不需要它们时,您将它们设置为 GONE,但当您需要它们时,您不会将它们设置为 VISIBLE。将 设置为 GONE 后,滚动时将重复使用相同的单元格。届时,如果您不将它们设置为 VISIBLE,它们将永远不会显示。

if(position==64||position==57||position==58||position==59||position==50||position==23||position==16||position==17||position==9||position==10||position==12||position==1||position==2||position==8)
{
    view.txtViewTitle.setVisibility(View.GONE);
    view.imgViewFlag.setVisibility(View.GONE);
} else {
    view.txtViewTitle.setVisibility(View.VISIBLE);
    view.imgViewFlag.setVisibility(View.VISIBLE);
}

要解决关于标题的第二部分,您可以为每个单元格的标题添加一个 TextView,但仅当它是行中的第一项时才将其可见性设置为 VISIBLE。这样您就不必编写太多自定义代码。

希望这对您有所帮助。

关于Android Gridview - 滚动时元素位置随机变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16434863/

相关文章:

android - 单击 GridView 项目时在 PopupWindow 中显示完整图像?

android - GridView 只显示两列

android - 如何将 createdAt 日期字段转换为 Parse.com 中的字符串?

android - 确定当前设备上是否存在 Activity?

android-layout - TextView 文本在左侧被截断,而不是被省略号缩短

android - 在视频的特定时间编码视频文件

android - 我如何在android中设置imageview运行时的风格

android - 当 numColumns 更改时,如何在 gridview 上保留所选项目突出显示?

Android - 从 ImageView 获取颜色并将 ColorFIlter 应用于 Drawable

android - 使用 ImageLoader 库时 GridView 中的重复项