CursorLoader异步装载联系人

1.初始化Fragment

  (1)创建SimpleCursorAdapter对象
  (2)调用LoadManager.initLoader方法创建一个新的Loader对象,或使用已经存在的Loader对象

2.Fragment与ActionBar关联

3.重新创建Loader对象,调用restartLoader方法等

4.创建新的Loader对象,实现onCreateLoader方法 ,创建并返回CursorLoader对象

5.处理装载完的数据,在onLoaderFinshed方法中调用Adapter的swapCursor方法指定新的Cursor对象

6.释放资源

代码如下:

package com.gst.user.application;

import android.app.ListFragment;
import android.app.LoaderManager;
import android.content.CursorLoader;
import android.content.Loader;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.SearchView;
import android.widget.SimpleCursorAdapter;

/**
 * Created by user on 12/25/15.
 */
public class ContactFragment extends ListFragment implements SearchView.OnQueryTextListener,LoaderManager.LoaderCallbacks<Cursor>{
    SimpleCursorAdapter mAdapter;
    String mCurFilter;
    static  final String[] CONTACTS_SUMMARY_PROJECTION=new String[]{
            ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME,
            ContactsContract.Contacts.CONTACT_STATUS, ContactsContract.Contacts.CONTACT_PRESENCE,
            ContactsContract.Contacts.PHOTO_ID, ContactsContract.Contacts.LOOKUP_KEY,
    };

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        setEmptyText("没有该联系人");
        setHasOptionsMenu(true);
        mAdapter=new SimpleCursorAdapter(getActivity(),android.R.layout.simple_list_item_2,
                null,new String[]{ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.CONTACT_STATUS},
                new int[]{android.R.id.text1,android.R.id.text2},0);
        setListAdapter(mAdapter);
        getLoaderManager().initLoader(0,null,this);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

        MenuItem item=menu.add("搜索");
        item.setIcon(R.drawable.other);
        item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        SearchView searchView=new SearchView(getActivity());
        searchView.setOnQueryTextListener(this);
        item.setActionView(searchView);
    }

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        Uri baseUri;
        if (mCurFilter!=null){
            baseUri=Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_FILTER_URI,
                    Uri.encode(mCurFilter));
        }else {
            baseUri= ContactsContract.Contacts.CONTENT_URI;
        }
        String select="(("+ ContactsContract.Contacts.DISPLAY_NAME+" NOT NULL) AND ("
                +ContactsContract.Contacts.HAS_PHONE_NUMBER+"=1) AND (" +
                ContactsContract.Contacts.DISPLAY_NAME+" != ''))";
         return new CursorLoader(getActivity(),baseUri,CONTACTS_SUMMARY_PROJECTION,select,null,
                 ContactsContract.Contacts.DISPLAY_NAME+" COLLATE LOCALIZED ASC");
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        mAdapter.swapCursor(data);

    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
        mAdapter.swapCursor(null);

    }

    @Override
    public boolean onQueryTextSubmit(String query) {
        return true;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        mCurFilter= TextUtils.isEmpty(newText)? null:newText;
        getLoaderManager().restartLoader(0,null,this);
        return true;
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值