Android Gridview-положение элемента меняется случайным образом при прокрутке
У меня есть GridView
, которые имеют 10 строк и 7 столбцов. Элементы в GridView
не находятся в уникальном виде, то есть одна строка содержит 7 элементов, одна строка имеет только 4 или 5 элементов и т. д. Теперь я создал GridView
с полными элементами, то есть 70 элементов. Теперь я хочу скрыть некоторые элементы в GridView
. Я попытался установить видимость ImageView
и TextView
в View.INVISIBLE
. Он работает, но когда мы прокручиваем GridView
, он случайным образом меняется.
-
Еще одна проблема заключается в том, что каждая строка содержит заголовок не для каждого элемента.
Что я должен делать? Я новичок в 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 ответ:
Проблема заключается в вызовах 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 для заголовка в каждую ячейку, но только установить его видимость видимой, если это первая ячейка. пункт в строке. Таким образом, вам не придется создавать слишком много пользовательского кода.
Надеюсь, это поможет.