У меня есть GridView, в котором я хочу всегда отображать 7 значков, а иногда и дополнительный значок в зависимости от запроса.В начале дополнительный значок никогда не отображается.Это структура:
0 1 2
3 4 5
6 [7]
Все значки вписываются в экран, поэтому мне не нужна прокрутка.Каждый значок состоит из изображения и текста.
Для этого у меня есть CustomAdapter, который расширяет BaseAdapter.Я переопределил метод getView, в котором я устанавливаю текст и изображение для каждого значка.
public View getView(int position, View convertView, ViewGroup parent) {
View v = null;
if (convertView == null) {
LayoutInflater li = ((Activity) context).getLayoutInflater();
v = li.inflate(R.layout.icon, null);
} else {
v = convertView;
}
TextView tv = (TextView) v.findViewById(R.id.icon_textView);
tv.setText(position);
ImageView iv = (ImageView) v.findViewById(R.id.icon_ImageView);
iv.setImageResource(imageResourcesArray[position]);
if ((position == ADDITIONAL_ICON)) && !showAdditionalIcon) {
v.setVisibility(View.INVISIBLE);
}
return v;
}
imageResourcesArray[]
- это массив целых чисел с ресурсами изображения.Другие функции и переменные в CustomAdapter:
public static final int ADDITIONAL_ICON = 7;
private boolean showAdditionalIcon = false;
public showAdditionalIcon(){
this.showAdditionalIcon = true;
notifyDataSetChanged();
// notifyDataSetInvalidated();
}
public hideAdditionalIcon(){
this.showAdditionalIcon = false;
notifyDataSetChanged();
// notifyDataSetInvalidated();
}
Позже я создаю и устанавливаю CustomAdapter для GridView из класса, который расширяет Activity (скажем, ClassA
):
GridView grid = (GridView) findViewById(R.id.main_gridView);
customAdapter = new CustomAdapter(this);
grid.setAdapter(customAdapter);
Моя проблема возникает, когда после некоторых вычислений и запросов к серверу я должен показать дополнительный значок (номер 7).Поэтому я звоню (от ClassA
):
customAdapter.showAdditionalIcon();
Теперь появляется дополнительный значок, но первый значок исчезает ... Я пытался использовать notifyDataSetInvalidated()
и notifyDataSetChanged()
, но оба имелитот же результат.
Конечно, я мог бы сгенерировать новый CustomAdapter
с разрешенным дополнительным значком, но я бы предпочел не делать этого ...
Заранее спасибо.