【问题标题】:Delete item from gridview从网格视图中删除项目
【发布时间】:2014-07-06 12:17:21
【问题描述】:

我知道这里有很多关于如何删除项目的答案,但我无法让它工作。它显示错误。你能看吗?我添加了适配器删除(位置),但我认为它工作不正确。 所以我想在使用onItemLongClickListener 之后也删除文件及其缩略图。

主要:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final GridView grid = (GridView) findViewById(R.id.gridview);
    final ThumbnailAdapter thumbnails = new ThumbnailAdapter(this);
    grid.setAdapter(thumbnails);
    grid.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View v, int position,
                    long id) {

                final String imgPath = thumbnails.getImagePath(position);
                File file = new File(imgPath);                  
                 file.delete();
                 thumbnails.remove(position);
                 thumbnails.notifyDataSetChanged();
                 grid.invalidateViews();
                 grid.setAdapter(thumbnails);
                return true;


            }
    });

适配器:

public class ThumbnailAdapter extends BaseAdapter {

// Context required for performing queries
private final Context mContext;

// Cursor for thumbnails
private final Cursor cursor;
private final int imgId;
private final int imgData;
private final int count;

public ThumbnailAdapter(Context c) {
    this.mContext = c;

    // Get list of all images, sorted by last taken first
    final String[] projection = {
            MediaStore.Images.Media._ID,
            MediaStore.Images.Media.DATA
    };
    cursor = mContext.getContentResolver().query(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            projection,
            null,
            null,
            MediaStore.Images.Media.DATE_TAKEN + " DESC"
    );
    imgId = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
    imgData = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    count = cursor.getCount();
    Log.d("ThumbnailAdapter", count + " images found");
}
@Override
public int getCount() {
    return count;
}
@Override
public Object getItem(int position) {
    return position;
}
@Override
public long getItemId(int position) {
    return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) {  // if it's not recycled, initialize some attributes
        imageView = new ImageView(mContext);
    } else {
        imageView = (ImageView) convertView;
    }
    cursor.moveToPosition(position);
    final Bitmap thumbnail = MediaStore.Images.Thumbnails.getThumbnail(
            mContext.getContentResolver(),
            cursor.getInt(imgId), 
            MediaStore.Images.Thumbnails.MICRO_KIND,
            null
    );
    imageView.setImageBitmap(thumbnail);
    Log.d("ThumbnailAdapter", "render: " + cursor.getString(imgData));
    return imageView;

}

public String getImagePath(int position) {
    cursor.moveToPosition(position);
    return cursor.getString(imgData);
}
public void remove(int position) {
    remove(position);
    notifyDataSetChanged();

}

}

【问题讨论】:

  • 您遇到的错误是什么
  • 启动应用程序后,当我制作 onlongitemclicklistener 时,它显示错误

标签: android image gridview gallery delete-file


【解决方案1】:

我猜它的堆栈溢出。您在适配器中的 remove 方法永远是递归的。 而不是自己删除文件,而是要求内容解析器将其删除。和重新加载数据。 您不必在点击列表器中再次调用 grid.setAdapter(thumbnails)

【讨论】:

    【解决方案2】:

    请检查这一行:

    file.delete();
                 thumbnails.remove(position);
    

    您首先删除文件,然后将其从适配器中删除。它应该是其他方式。您重置适配器然后删除实际文件。您的缩略图已被删除,但仍连接到适配器。

    【讨论】:

    • 嘿,我在您的页面上看到您是 android 开发人员。你能在一个程序中帮助我吗?我有一个程序可以搜索所有图像(使用 MediaStore.Images.Media)并在 gridview 中显示它们(它们的缩略图)。但我需要显示文件夹(包含该图像)并在 gridview 中显示它们。点击他们后,他们应该给我看图片。你能帮我重新制作我的项目吗??
    • 不要那样做 MediaStore.Images ??它会很快导致内存不足,而不是使用通用图像加载器对 gridview 使用延迟加载
    • 它不会导致内存不足,因为在 gridview 中我显示缩略图(不是图像)。它工作正常。只有第一次发射太久了。所以你能像我说的那样帮忙制作这样的画廊吗>??带文件夹
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 2015-01-04
    相关资源
    最近更新 更多