이미지에 대한 정보가 db에서로드되어 사용자 정의 갤러리보기에 표시된 다음 코드가 있습니다. 문제는 AsyncTask의 백그라운드 스레드에있는 갤러리의 OnItemClickListener에 기본 UI 스레드의 일부인 설정을 적용하는 방법을 볼 수 없다는 것입니다. 액티비티를로드 할 때 대화 상자가 튀어 나오지만 멈추고 많은 작업을하고있는 UI 스레드에서 OnItemClickListener를 설정하기 때문에 대화 상자가 작동한다고 생각합니다. 이 문제를 어떻게 해결할 수 있습니까?OnItemClickListener를 사용하여 AsyncTask 내 ProgressDialog 표시기
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();
}
}
어디에서이 AsyncTask를 유지 했습니까? 그것은 내부 수업입니까? –
네 자신의 클래스가 아닌 ActivityGallery라는 클래스 내에있다. – SamRowley
확인. 한 가지 해봐 .. setONItemClickListener, setContentView, setAdapter를 부모 클래스에 넣어 라. AsyncTask에서이 모든 것을 설정하지 마라. –