我有一个 GridView
,它有 10 行和 7 列。 GridView
中的元素不是唯一的形式,即一行包含 7 个元素,一行只有 4 或 5 个元素,等等。现在我创建了 GridView
具有完整元素,即 70 个元素。现在我想在 GridView
中隐藏一些元素。我尝试将 ImageView
和 TextView
的可见性设置为 View.INVISIBLE
。它可以工作,但是当我们滚动 GridView
时它会随机变化。
还有一个问题是每一行都包含一个标题,而不是每个元素。
我必须做什么?我是安卓新手。
代码:
@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/