Android utilise CursorLoader pour lire le carnet d'adresses des téléphones portables

Utilisez CursorLoader pour lire le carnet d'adresses des téléphones portables

今天get到一个新技能,使用CursorLoader异步加载数据通讯录数据。

实现功能:通过读取手机通讯录所有联系人的名字及联系号码,将数据通过CursorLoader异步加载到ListView上。

Écrivez une description de l'image ici

Voici le rendu. Étant donné que je n'ai enregistré qu'un seul contact sur l'émulateur, l'effet d'utilisation n'est pas évident. J'ai téléchargé l'apk sur le téléphone et l'ai installé pour lire le contact. Il n'y a aucun problème car le contact est lié à certains secrets indescriptibles, donc je ne prendrai pas de capture d'écran. .

Diagramme de structure du répertoire du projet:
Écrivez une description de l'image ici

Très simple, il n'y a qu'une seule classe et deux fichiers de disposition, l'un est le fichier de disposition d'activité et l'autre est le fichier de disposition d'adaptateur personnalisé. D'accord, c'est à nouveau un adaptateur personnalisé. Mon principe est d'écrire plus et de pratiquer davantage quand j'étudie, alors comment ça se complique.

Code sur ——————————————

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.LoaderManager;
import android.app.LoaderManager.LoaderCallbacks;
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.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity implements LoaderCallbacks<Cursor> {
    private ListView listView;
    private LoaderManager loaderManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.listView1);
        loaderManager = getLoaderManager();
        loaderManager.initLoader(1111, null, this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        // TODO Auto-generated method stub
        Uri uri = ContactsContract.Contacts.CONTENT_URI;
        CursorLoader cursorLoader = new CursorLoader(this, uri, null, null,
                null, null);
        return cursorLoader;
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        // TODO Auto-generated method stub
        List<List<String>> list = new ArrayList<List<String>>();
        //list存储整个联系人的数据
        while (data.moveToNext()) {
            String name = null;
            List<String> list_data = new ArrayList<String>();
            //list_data存储单个联系人的数据,我只读取了名字和电话号码。
            name = data.getString(data
                    .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            int id = data.getInt(data
            //android 内部通讯录并不是将电话和联系人存储在同一张表格中,而是通过一个ID将联系人和电话关联
                    .getColumnIndex(ContactsContract.Contacts._ID));
            Cursor cursor = getContentResolver().query( //通过ID获取对应的电话表格游标
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                    null,
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "="
                            + id, null, null);
            while (cursor.moveToNext()) {//遍历游标获取电话

                    list_data.add(name);
                    list_data.add(cursor
                            .getString(cursor
                                    .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
                                    //ContactsContract.CommonDataKinds下的常量可以去查找一下官方API太多了一两句解释不清,官网这一节有中文的的翻译

            }

            list.add(list_data);
        }
        myAdapter adapter = new myAdapter(list);
        listView.setAdapter(adapter);
    }
//自定义适配器
    class myAdapter extends BaseAdapter {
        List<List<String>> list = new ArrayList<List<String>>();

        public myAdapter(List<List<String>> list) {
            // TODO Auto-generated constructor stub
            this.list = list;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return list.get(position);
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            View view = null;
            if (convertView == null) {
                view = LayoutInflater.from(MainActivity.this).inflate(
                        R.layout.list, null);

            } else {
                view = convertView;
            }
            TextView textView2 = (TextView) view
                    .findViewById(R.id.list_textView2);
            TextView textView3 = (TextView) view
                    .findViewById(R.id.list_textView3);
            List<String> list1 = new ArrayList<String>();
            list1 = list.get(position);
            textView2.setText(list1.get(0));
            textView3.setText(list1.get(1));
            return view;

        }
    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
        // TODO Auto-generated method stub

    }

}

Fichier de mise en page:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#cccccc"
        android:paddingBottom="10sp" >

        <TextView
            android:id="@+id/textView2"
            android:layout_width="0sp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:paddingTop="10dp"
            android:text="姓名"
            android:textColor="#2828ff"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/textView3"
            android:layout_width="0sp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:gravity="center_horizontal"
            android:paddingTop="10dp"
            android:text="电话"
            android:textColor="#2828ff"
            android:textSize="20sp" />
    </LinearLayout>

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </ListView>

</LinearLayout>

list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical|center_horizontal" >
        <TextView
            android:id="@+id/list_textView2"
            android:layout_width="0sp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:text="TextView"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/list_textView3"
            android:layout_width="0sp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:gravity="center"
            android:text="TextView"
            android:textSize="20sp" />
    </LinearLayout>

</LinearLayout>
Publié 34 articles originaux · J'aime 10 · Visites 30 000+

Je suppose que tu aimes

Origine blog.csdn.net/q296264785/article/details/53219176
conseillé
Classement