Android Gridview-положение элемента меняется случайным образом при прокрутке


У меня есть GridView, которые имеют 10 строк и 7 столбцов. Элементы в GridView не находятся в уникальном виде, то есть одна строка содержит 7 элементов, одна строка имеет только 4 или 5 элементов и т. д. Теперь я создал GridView с полными элементами, то есть 70 элементов. Теперь я хочу скрыть некоторые элементы в GridView. Я попытался установить видимость ImageView и TextView в View.INVISIBLE. Он работает, но когда мы прокручиваем GridView, он случайным образом меняется.

  1. Это именно то, что я разыскивается

  2. Еще одна проблема заключается в том, что каждая строка содержит заголовок не для каждого элемента.

Что я должен делать? Я новичок в 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 4

1 ответ:

Проблема заключается в вызовах 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);
}
Вы устанавливаете их на пропавшие, когда они вам не нужны, но вы не устанавливаете их на видимые, когда они вам нужны. После того, как вы установите в пропало, те же самые ячейки будут использоваться повторно при прокрутке. В этот момент, если вы не установите их видимыми, они никогда не появятся.
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 для заголовка в каждую ячейку, но только установить его видимость видимой, если это первая ячейка. пункт в строке. Таким образом, вам не придется создавать слишком много пользовательского кода.

Надеюсь, это поможет.