Android Gridview - 滚动时随机更改元素位置

时间:2013-05-08 07:19:30

标签: android android-gridview

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

  1. This is exactly what I wanted

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

  3. 我该怎么办?我是Android新手。

    代码:

    @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;
    }
    
    }
    

1 个答案:

答案 0 :(得分:3)

问题在于代码中的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。这样您就不必制作太多的自定义代码。

希望这有帮助。