Здесь я получаю сохраненные пути изображения из базы данных. Так что я показываю изображения в gridview
с помощью путей. Но, как показано в моем коде ниже, я загружаю cursoradapter
в asynctask
. Проблема здесь в том, что в первый раз все в порядке, что требуется некоторое время, пока все изображения не будут загружены.Реализация ленивой загрузки для simplecursoradapter
Но если пользователь добавляет еще один ПОС к базе данных, он снова занимает много времени, чтобы загрузить все изображения, как я держал asynctask
в onResume() сделать дополнительное фото также видно. То же самое происходит, когда пользователь добавляет каждое изображение. Может ли кто-нибудь предложить мне простой способ получить последнее добавленное изображение, видимое в gridview, без необходимости загружать все фотографии снова. Или, по крайней мере, может кто-нибудь помочь мне реализовать ленивый адаптер к нынешнему курсорному адаптеру, если это невозможно?
public class ImagesScreen extends Activity {
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.images_screen);
gridView = (GridView)findViewById(R.id.gridView1);
String[] from = new String[] { Reminders.MOM_PATHS };
int[] to = new int[] {};
dbCon = new SQLiteConnectClass(ImagesScreen.this);
imageCursorAdapter = new ImageCursorAdapter(ImagesScreen.this, R.layout.griditem, null, from, to);
gridView.setAdapter(imageCursorAdapter);
}
protected void onResume() {
super.onResume();
new GetImages().execute((Object[]) null);
}
private class GetImages extends AsyncTask<Object, Object, Cursor> {
@Override
protected Cursor doInBackground(Object... params) {
return dbCon.getAllImages();
}
@Override
protected void onPostExecute(Cursor result) {
imageAdapter.changeCursor(result);
}
public void addpictures(View view){
// code for adding picture paths to the database by transferring to another activity.
}
}
CustomAdapter класс:
public class ImageCursorAdapter extends SimpleCursorAdapter{
private int layout;
private LayoutInflater mLayoutInflater;
private Context mContext;
public ImageAdapter(Context context, int layout, Cursor c,String[] from, int[] to) {
super(context, layout, c, from, to,0);
this.layout = layout;
mLayoutInflater=LayoutInflater.from(context);
mContext = context;
}
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View v = mLayoutInflater.inflate(layout, parent, false);
return v;
}
public void bindView(final View v, final Context context, Cursor c) {
final int id = c.getInt(c.getColumnIndex("id"));
final String imagepath = c.getString(c.getColumnIndex("paths"));
ImageView imageview = (ImageView)v.findViewById(R.id.imageView1);
File imgFile = new File(imagepath);
if(imgFile.exists()){
Bitmap imageBitmap = decodeFile(imgFile);
imageview.setImageBitmap(imageBitmap);
}
}
}
Посмотрите на этот пример http://stackoverflow.com/a/3068012/964741 –
почему вы не можете использовать базовый адаптер вместо адаптера курсора. – Senthil
@RajaReddyPolamReddy Не могли бы вы помочь в том, как реализовать это в моем cursror adpater, а не в простом адаптере. – Apparatus