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);
}
}



---

+ Recent posts