У меня есть GridView с одним ImageView и одним TextView ниже в каждой ячейке.GridView остается пустым
Логика работает хорошо. Я делаю ссылку на мой GridView, устанавливаю столбцы и устанавливаю адаптер. Во время этого у меня есть поток, который устанавливает изображения и их имя в список. (Один список DrawAble для изображений и один список строк для этикеток). Чтобы удовлетворить моих пользователей, я хочу обновить GridView, пока поток добавляет изображения и ярлыки в списки.
Но обновление работает только в том случае, если я предоставляю неприятные статические переменные. (Я ненавижу их). ИЛИ если я устанавливаю новый адаптер в GridView каждый раз, когда произошло обновление. (Это также противно, потому что вы не в состоянии прокрутить GridView во время обновления ист ..)
Это мой CustomAdapter:
public CustomAdapter(DialogBox dialogBoxActivity,List<Drawable> imported_scaled_images, List<String> imported_labels, int position) {
this.context = dialogBoxActivity;
this.scaledImage = imported_scaled_images.toArray(new Drawable[imported_scaled_images.size()]);
this.labels = imported_labels.toArray(new String[imported_labels.size()]);
this.used_cells = position;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void updateGrid(List<Drawable> imported_scaled_images, List<String> imported_labels, int position) {
this.scaledImage = imported_scaled_images.toArray(new Drawable[imported_scaled_images.size()]);
this.labels = imported_labels.toArray(new String[imported_labels.size()]);
this.used_cells = position;
this.notifyDataSetChanged();
Log.e("update","true");
}
@Override
public void notifyDataSetChanged() {
// TODO Auto-generated method stub
super.notifyDataSetChanged();
Log.e("notify","true");
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return used_cells;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public class Holder {
ImageView img;
TextView tv;
public Holder(ImageView img, TextView tv) {
this.img = img;
this.tv = tv;
}
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ImageView img;
TextView tv;
TextView tv_abc;
if(convertView == null) {
convertView = inflater.inflate(R.layout.customadapter_view_layout, null);
img = (ImageView) convertView.findViewById(R.id.img);
tv =(TextView) convertView.findViewById(R.id.tv);
//tv_abc = (TextView) convertView.findViewById(R.id.tv_normal_portrait_abc);
convertView.setTag(new Holder(img,tv));
} else {
Holder holder = (Holder) convertView.getTag();
img = holder.img;
tv = holder.tv;
//tv_abc = holder.tv_abc;
}
img.setImageDrawable(scaledImage[position]);
tv.setText(labels[position]);
notifyDataSetChanged();
return convertView;
}
}
И на моей деятельности я есть updateGrid и я называю это в TimerTask на MainThread:
private void updateGrid() {
customAdapter.updateGrid(images, labels, position);
}
что Случается, что GridView остается пустым. Возможно, это потому, что Position равно 0, а im. Установка базового адаптера в gridview. Но это не может быть проблемой, потому что когда я обновляю, он должен распознавать новый размер в getCount(). И снова логика работает хорошо. Изображения, где добавлены и методы updateGrid и notiyDataSetChanged, вызываются так, как я хочу. Но GridView остается, как, я не люблю показывать эти изображения (полностью пустые).
Надеюсь, что-то может обеспечить хорошее решение. Я ценю каждую помощь и каждое усовершенствование кода, опубликованного выше. (Что касается производительности или чего-то еще). Спасибо!
Обновление: Позиция - это моя переменная, которая подсчитывает доступные ячейки. Потому что некоторые ячейки пусты (= null). Из-за этого я не знаю, сколько ячеек будет заполнено (потому что я сортирую изображения по алфавиту (для каждой строки => некоторые ячейки заполнены нулями), я не могу предоставить метод BaseAdapters getCount число до того, как моя логика hasn ' т законченный)
Благодарим вас за ответ. Как видите, import_scaled_Images доступен только в конструкторе или в методе updateGrid. Но доступно доступно scaledImages (массив, который получает свои данные из imported_scaled_Images). Поэтому я ввел метод getCount: 'scaledImage.length' .. но проблема остается прежней. GridView остается пустым. Энди другие предложения? @Haresh Chhelana – MMike
@ MMike, попробуйте сохранить локальный ToalItemCoounter в адаптере и обновленное значение, когда данные сетки обновления также возвращают значение ToalItemCoounter в getCount() –
! Я принял ваш ответ :) – MMike