Android Muti选择GridView项目

时间:2015-08-20 12:08:53

标签: android gridview multi-select

我想选择像gallery这样的gridview项目。我第一次使用itemLongClickListenr选择,然后只选择一次点击其他将被删除的项目。就像图库图像选择然后删除多个图像。我怎样才能做到这一点。有什么建议吗?谢谢。

1 个答案:

答案 0 :(得分:1)

我有类似的任务。我做了如下:

1 - 创建自定义适配器。

2实现项目单击侦听器和长项目单击侦听器。

3 - 在长项目点击监听器上,启用项目选择。

4 - 启用选择时,使用项目单击侦听器将对象选择的属性设置为从数据数组中选择/取消选择。

5-点击删除按钮后,检查数据数组并删除具有所选属性的项目。

6 - 通知适配器有关数据的更改。

这就是全部。这是我使用的代码,修改它以实现您的任务。

public class FavoriteGVAdapter extends ArrayAdapter<FavoriteObject> {
Context context;
int layoutResourceId;
ArrayList<FavoriteObject> data = new ArrayList<FavoriteObject>();
boolean editable;

public FavoriteGVAdapter(Context context, int layoutResourceId,
                         ArrayList<FavoriteObject> data, boolean editable) {
    super(context, layoutResourceId, data);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    this.data = data;
    this.editable=editable;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    Holder holder = null;

    if (row == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new Holder();
        holder.titleTV = (TextView) row.findViewById(R.id.titleTV);
        holder.subtitleTV = (TextView) row.findViewById(R.id.subtitleTV);
        holder.imageItem = (ImageView) row.findViewById(R.id.item_image);
        holder.delete_btn = (Button) row.findViewById(R.id.delete_btn);
        holder.edit_btn = (Button) row.findViewById(R.id.edit_btn);
        row.setTag(holder);
        row.setId(position);
    } else {
        holder = (Holder) row.getTag();
    }

    FavoriteObject item = data.get(position);
    holder.titleTV.setText(item.getTitle());
    holder.subtitleTV.setText(item.getPallets().size()+" Swatches");
    try{
        Drawable drawable = context.getResources().getDrawable(context.getResources()
                .getIdentifier(item.getImageName(), "drawable", context.getPackageName()));
        holder.imageItem.setImageDrawable(drawable);
    }catch (Exception e){
        holder.imageItem.setImageDrawable(null);
        e.printStackTrace();
    }
    if (editable){
        holder.edit_btn.setVisibility(View.VISIBLE);
        holder.edit_btn.setOnClickListener(new OnEditItemClick(position));
    }else {
        holder.edit_btn.setVisibility(View.INVISIBLE);
        row.setOnClickListener(new OnItemClick(position));
        row.setOnLongClickListener(new OnLongClick(position));
    }
    return row;

}

static class Holder {
    TextView titleTV,subtitleTV;
    ImageView imageItem;
    Button edit_btn,delete_btn;

}
private class OnLongClick implements View.OnLongClickListener {
    private int mPosition;

    OnLongClick(int position){
        mPosition = position;
    }
    @Override
    public boolean onLongClick(View v) {
        v.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
        if (((Activity) context) instanceof FavoritesActivity) {
            ((FavoritesActivity) context).onFavoriteItemLongClick(mPosition);
        }
        return true;
    }
};
private class OnItemClick implements View.OnClickListener {
    private int mPosition;

    OnItemClick(int position){
        mPosition = position;
    }
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if (((Activity) context) instanceof FavoritesActivity) {
            ((FavoritesActivity) context).onFavoriteItemClick(mPosition);
        }
    }
};
private class OnEditItemClick implements View.OnClickListener {
    private int mPosition;

    OnEditItemClick(int position){
        mPosition = position;
    }
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if (((Activity) context) instanceof FavoritesActivity) {
            ((FavoritesActivity) context).onFavoriteItemEditClick(mPosition);
        }
    }
};

}

在您的活动中使用此:

 public void onFavoriteItemClick(int mPosition)
{
    if (editing){
        gridArray.get(mPosition).selectItem(true);
        CMAppManager.getInstance().saveFavoritesData(this, gridArray);
        customGridAdapter.notifyDataSetChanged();
    }

}
public void onFavoriteItemLongClick(int mPosition)
{
    editing=true;
    customGridAdapter = new FavoriteGVAdapter(this, R.layout.favorite_item, gridArray,(save_pallet)?false:true);
    gridView.setAdapter(customGridAdapter);
}

然后在删除按钮上单击,从适配器阵列中删除所选项目并通知适配器。