managedQuery() 와 startManagingCursor() 가 deprecated 되면서 대체 사용이 가능한 LoaderManager 와 CursorLoader 를 이용한 간단한 예제
. 주소록 접근 및 리스트뷰로 가져오기
1. 'implements LoaderManager.LoaderCallBack<Cursor>' 를 인터페이스로 추가
2. Implements 해야할 3개 함수 구현
3. 주요 구현부
. 로더 초기화 - static function 이므로 getLoaderManager() 만 호출 하면 된다.
getLoaderManager().initLoader(0, null, this);
. onCreateLoader() - 가져올(접근할) 데이터를 지정
. onLoaderFinished() - 로드가 완료되면 adapter 에 지정하거나 커서를 가져올 수 있게 된다.
<activity_main.xml>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
android:orientation="vertical">
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
---
<MainActivity.java>
import android.app.ListActivity;
import android.app.LoaderManager;
import android.content.CursorLoader;
import android.content.Loader;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListAdapter;
import android.widget.SimpleCursorAdapter;
public class MainActivity extends ListActivity implements LoaderManager.LoaderCallbacks<Cursor> {
SimpleCursorAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] columns = new String[] {ContactsContract.Contacts.DISPLAY_NAME};
int[] ids = new int[] {android.R.id.text1};
mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null, columns, ids, 0);
setListAdapter(mAdapter);
getLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
CursorLoader cursorLoader = new CursorLoader(MainActivity.this, ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
return cursorLoader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}
}
---
'android' 카테고리의 다른 글
AppCompatAcrtivity 에서 Fragment back stack 이 동작하지 않을때 처리 (0) | 2015.11.23 |
---|---|
managedQuery() deprecated => getContentResolver.query() 로 대체 (0) | 2015.11.23 |
HttpClient - Android 6.0 에서 삭제됨. - HttpURLConnection 사용. (0) | 2015.11.23 |
안드로이드 시스템의 이미지 및 기본 아이콘에 대한 정보 확인 가능한 사이트 (0) | 2015.11.23 |
안드로이드 스튜디오 "Autoscroll to Source, Autoscroll from Source" 설정을 저장하자. (0) | 2015.11.20 |