StackOverflow에서 질문을 확인했지만 문제를 해결할 수 없습니다. ListView
에서 일부 데이터를 비동기 적으로 (UI 스레드를 오버로드하지 않기 위해) 가져 오려고하는데 데이터를 가져 오는 동안 ProgressDialog
을 표시하려고합니다. ContentProvider
을 사용하여 데이터를 가져오고 ListView
에 데이터를 성공적으로로드합니다. 그러나 progressDialog
은 회전하지 않지만 목록에 데이터가 표시된 후 회전하기 시작하고 멈추지 않습니다 (회전 유지). ListView
이 보이면 ProgressDialog
을 돌리고 dismiss()
을 어떻게 만들 수 있습니까? 여기 LoadManager를 사용하는 ProgressDialog
LoaderCallbacks
구현 활동 : 그러나해서 ProgressDialog가 회전되지
public class AttractionsActivity extends Activity implements LoaderManager.LoaderCallbacks<Cursor> {
DatabaseHelper dbHelper;
private SimpleCursorAdapter cursorAdapter;
private ListView attractionsListView;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.custom_listview);
attractionsListView = (ListView)findViewById(R.id.lvCustom);
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("Loading");
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(true);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
dbHelper = new DatabaseHelper(this);
dbHelper.open();
populateAttractionsListView();
dbHelper.close();
}
private void populateAttractionsListView() {
//final ImageView image = (ImageView) findViewById(R.id.ivAttImage);
//Initialize Loader
getLoaderManager().initLoader(0, null, this);
String[] from = {PoisContract.COLUMN_POI_MAIN_PIC, PoisContract.COLUMN_POI_NAME};
int[] to = {R.id.ivAttImage, R.id.tvAttName};
//Initialize CursorAdapter
cursorAdapter = new SimpleCursorAdapter(this, R.layout.attractions_listview_row, null, from, to, 0);
ViewBinder viewBinder = new ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
boolean binded = false;
if(view != null){
String imgName = cursor.getString(columnIndex);
int imgResId = getResources().getIdentifier(imgName, "drawable", getPackageName());
((ImageView) view).setImageResource(imgResId);
binded = true;
}
return binded;
}
};
//Set Adapter but there is no cursor right now
attractionsListView.setAdapter(cursorAdapter);
//Set Binder to the adapter
cursorAdapter.setViewBinder(viewBinder);
//Hide ListView as there is no data returned
attractionsListView.setVisibility(View.GONE);
}
private Cursor getAllAttractions(){
ContentResolver resolver = getContentResolver();
return resolver.query(PoisContract.CONTENT_URI, PoisContract.PROJECTION, null, null, null);
}
@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
progressDialog.show(this, "Please wait...", "Loading List...");
CursorLoader cursorLoader = new CursorLoader(AttractionsActivity.this, PoisContract.CONTENT_URI, PoisContract.PROJECTION, null, null, null);
return cursorLoader;
}
@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
cursorAdapter.swapCursor(cursor);
progressDialog.dismiss();
attractionsListView.setVisibility(View.VISIBLE);
}
@Override
public void onLoaderReset(Loader<Cursor> cursorLoader) {
//Data is not available anymore, delete reference
cursorAdapter.swapCursor(null);
}
로컬로 저장된 DB에서 이름을 가져 오는 ImageView를 바인딩해야하기 때문에 Cursor cursor = getAllAttractions();를 사용하고 있습니다. 줄'viewBinder.setViewValue (image, cursor, cursor.getColumnIndex (PoisContract.COLUMN_POI_MAIN_PIC)); ' – hrskrs
@hrskrs 당신은 일을 잘못하고 있습니다. setViewValue()를 수동으로 호출하는 것은 좋지 않습니다. getAllAttractions()에 대한 호출과 setViewValue()에 대한 호출을 제거합니다. Th 커서는 이미 이미지와 함께 해당 열을 가지고 있으며, ViewBinder는 자동으로 바인딩을 만듭니다. – Luksprog
괜찮아. 내가 당신의 도움을 주셔서 감사합니다. 나는 또한 레이아웃의'ImageView'에'setViewValue' 뷰를 제공해야합니다. 내가 어떻게 할 수 있니? – hrskrs