J'ai le code suivant dans lequel les informations sur les images sont chargées à partir d'une base de données et affichées dans une vue de galerie personnalisée. Le problème est que je ne peux pas voir un moyen de mettre le paramètre sur le OnItemClickListener pour la galerie dans le thread d'arrière-plan de la tâche Async comme il fait partie du thread principal de l'interface utilisateur (je pense?). Lorsque je charge l'activité, la boîte de dialogue apparaît mais se fige et je pense que c'est parce que je définis le OnItemClickListener dans le thread d'interface utilisateur qui prend beaucoup de travail. Comment puis-je résoudre ce problème?Gel de l'indicateur ProgressDialog dans AsyncTask avec OnItemClickListener
private class loadTask extends AsyncTask<String, Integer, String>{
ProgressDialog dialog = new ProgressDialog(ActivityGallery.this);
@Override
protected void onPreExecute(){
b = getIntent().getExtras();
dialog.setMessage("Loading...");
dialog.show();
}
@Override
protected String doInBackground(String... params) {
Log.v("SC", "ASYNC GETS HERE!!");
DBHandler handler = new DBHandler(ActivityGallery.this);
SQLiteDatabase db = handler.getReadableDatabase();
Cursor c = db.rawQuery("SELECT * FROM images", null);
if (c.moveToFirst()) {
do {
paths.add(c.getString(1));
Log.v("SC", "Cursor: " + c.getString(1));
} while (c.moveToNext());
}
c.close();
db.close();
handler.close();
return null;
}
@Override
protected void onProgressUpdate(Integer... s){
}
@Override
protected void onPostExecute(String result){
Log.v("SC", "Final Paths: " + paths.toString());
setContentView(R.layout.gallery);
gallery = (Gallery) findViewById(R.id.gallery1);
gallery.setAdapter(new ImageAdapter(ActivityGallery.this));
gallery.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position,
long id) {
selected_image_position = position;
GoToShareActivity();
}
});
dialog.dismiss();
}
}
Où avez-vous conservé cette tâche asynchrone? Est-ce en classe interne? –
Ouais c'est dans une classe appelée ActivityGallery pas dans sa propre classe. – SamRowley
Ok. faire une chose .. mettre le setONItemClickListener, setContentView, setAdapter dans la classe parente ... Ne pas mettre tout cela dans AsyncTask. –