【发布时间】:2016-11-01 20:24:53
【问题描述】:
我正在编写一个应用程序,它使用GridView 显示存储在本地数据库中的图像网格。我实现了由一个按钮触发的deleteSelectedImage 方法,该按钮删除了数据库中给定的网格图像。删除工作有效,但我无法让我的 GridView 自行刷新...如果我关闭活动然后再次打开它,更改是可见的。
这是我的代码:
活动:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.TextView;
public class GalleryShowActivity extends AppCompatActivity {
private final String DEBUG_TAG = "GalleryShowActivity";
private DatabaseHandler db;
private Cursor c;
private ImageAdapter mBaseAdapter;
private TextView selectedImageText;
private GridView mGridView;
// currently selected position in the grid
private int mSelectedPos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery_show);
db = new DatabaseHandler(this);
c = db.getCursorOnAllImages(this);
mBaseAdapter = new ImageAdapter(this, c, db);
mSelectedPos = -1;
selectedImageText = (TextView) findViewById(R.id.selectedImageText);
selectedImageText.setText("Selected image : NONE");
mGridView = (GridView) findViewById(R.id.gridview);
mGridView.setAdapter(mBaseAdapter);
mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
Log.d(DEBUG_TAG, "IMAGE CLICKED");
// click selects an image (can be changed later)
mSelectedPos = position;
selectedImageText.setText("Selected image : " + (position + 1));
}
});
}
public void deleteSelectedImage(View view) {
boolean exists = c.moveToPosition(mSelectedPos);
if (exists) {
boolean success = db.deletePointedPicture(c, this);
if (success) {
Log.d(DEBUG_TAG, "DELETE SUCCESS");
mBaseAdapter.notifyDataSetChanged();
// display a success message...
}
} else {
// display an error...
}
}
}
这是ImageAdapter 类的代码:
package ch.epfl.sweng.project;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
class ImageAdapter extends BaseAdapter {
private Context mContext;
private Cursor mCursor;
private DatabaseHandler mHandler;
ImageAdapter(Context context, Cursor cursor, DatabaseHandler handler) {
mContext = context;
mCursor = cursor;
mHandler = handler;
}
@Override
public int getCount() {
return mCursor.getCount();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int rowHeight = 200;
int rowWidth = 300;
ImageView imageView;
if (convertView == null) {
// if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(rowWidth, rowHeight));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
Bitmap bm = mHandler.getImageByIndex(mCursor, position);
imageView.setImageBitmap(bm);
imageView.setVisibility(View.VISIBLE);
return imageView;
}
}
我也试过这个:
mBaseAdapter = new ImageAdapter(this, c, db);
mGridView.setAdapter(mBaseAdapter);
而不是:
mBaseAdapter.notifyDataSetChanged();
但它不起作用。
【问题讨论】:
-
你从哪里打电话给
deleteSelectedImage?我没有看到这个也没有你指的按钮。
标签: android gridview refresh android-gridview baseadapter