我想选择像gallery这样的gridview项目。我第一次使用itemLongClickListenr选择,然后只选择一次点击其他将被删除的项目。就像图库图像选择然后删除多个图像。我怎样才能做到这一点。有什么建议吗?谢谢。
答案 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);
}
然后在删除按钮上单击,从适配器阵列中删除所选项目并通知适配器。