Измените видимость всех флажков в классе адаптеров gridview

Я хочу сделать видимым невидимый флажок длинным щелчком изображения. Но это делает только один флажок видимым.

   public GridViewAdapter(Context context, int layoutResourceId, 
  ArrayList<ImageItem> data) {

super(context, layoutResourceId, data);

this.layoutResourceId = layoutResourceId;//id of grid_item_layout
this.context = context;
this.imageFiles = imageFiles;
this.data = data;
}
 public View getView(final int position, final View convertView, @NonNull 
ViewGroup parent) {
row = convertView;
final ViewHolder holder;

if (row == null) {

    LayoutInflater inflater = ((Activity) context).getLayoutInflater();
    row = inflater.inflate(layoutResourceId, parent, false);
    holder = new ViewHolder();
    //find resource...
    holder.image = (ImageView) row.findViewById(R.id.image);
    holder.imageTitle = (TextView) row.findViewById(R.id.text);
    holder.check = (CheckBox) row.findViewById(R.id.checkbox);
 row.setTag(holder);
 }
 else
{  holder = (ViewHolder) row.getTag();}
holder.check.setOnCheckedChangeListener(null);
holder.check.setFocusable(false);

 holder.image.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
    holder.check.setVisibility(View.VISIBLE);
    return  true;
}
});
  holder.check.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        if (data.get(position).isSelected()) {
            data.get(position).setSelected(false);
        } else {
            data.get(position).setSelected(true);
        }      

    }
});


  holder.check.setChecked(data.get(position).isSelected());
 holder.imageTitle.setText(data.get(position).getTitle());

holder.image.setImageBitmap(data.get(position).getImage());
return row;
}
static class ViewHolder {
TextView imageTitle;
ImageView image;
CheckBox check;
}

мой открытый класс ImageItem { private Bitmap image ; выделено частное булевское ; private String title ; public ImageItem ( растровое изображение , название строки ) { super (); это . image = изображение ; это . title = title ; } public Bitmap getImage () { return image ; } Общественного недействительный setImage ( Растровое изображение ) { это . image = изображение ; } public String getTitle () { return title ; } public void setTitle ( название строки ) { this . title = title ; } public void setSelected ( выбрано логическое значение ) { this . selected = selected ; } public boolean isSelected () { return selected ; } } класс

GridAdapter = new GridViewAdapter(this, R.layout.grid_item_layout, 

getData());
gridView.setAdapter(gridAdapter);
// gridView.OnLongclick....
for(int index=0;index< adapterView.getChildCount();index++) {
     View nextchild = (adapterView.getChildAt(index));
     CheckBox checkBox = (CheckBox) nextchild.findViewById(R.id.checkbox);
     checkBox.setVisibility(View.VISIBLE);
}

Это используется для поддержания состояния флажка. Я ранее изменил видимость в mainactivity следующим образом

holder.check.setChecked(data.get(position).isSelected())

Но я столкнулся с некоторыми другими проблемами в этом методе, поэтому хочу изменить состояние флажка в самом классе адаптера. Ям нанёс это на две недели. Любая помощь приветствуется.

java,android,android-layout,android-arrayadapter,android-checkbox,

0

Ответов: 1


2

Из этого утверждения в вашем адаптере:

ImageItem

похоже, что ImageItemуже поддерживает состояние флажка в selectedполе участника. Если это так, то вместо того, чтобы повторять фактические представления в списке и переключать видимость флажка для каждого из них, вы можете перебирать список ImageDataи уведомлять позже адаптер, который данные изменили.

Что-то вроде этого:

List<ImageItem> list = // ...

// Mark everything as selected
for(ImageItem item : list){
    item.setSelected(true);
}

// Refresh the list
gridAdapter.notifyDataSetChanged();

Идея состоит в том, чтобы обновить сама модель и затем запустить обновление списка.

Обновлено
OK, основываясь на ваших комментариях, позвольте мне попытаться объяснить еще раз:

Итак, теперь у вас есть этот кусок кода для переключения всех флажков:

GridAdapter = new GridViewAdapter(this, R.layout.grid_item_layout, getData());
gridView.setAdapter(gridAdapter);

// gridView.OnLongclick....
for(int index=0;index< adapterView.getChildCount();index++) {
     // ....
}

Я предлагаю следующее:

// Get the data and store it in a local copy
List<ImageItem> items = getData();

// Mark each item in the list as selected
for(ItemItem item : items){
    item.setSelected(true);
}

// Pass the updated list to the adapter
GridAdapter = new GridViewAdapter(this, R.layout.grid_item_layout, items);
gridView.setAdapter(gridAdapter);

// Assuming that your adapter is properly implemented, 
// all checkboxes should be marked as selected now.
Java, Android, андроид-макет, андроид-arrayadapter, андроид-флажок,
Похожие вопросы
Яндекс.Метрика