proveedor de contenido de Android obtener práctica de contactos

Descubrí un sitio web gigante de aprendizaje de inteligencia artificial hace unos días, que es fácil de entender y divertido. No puedo evitar compartirlo con todos. Haga clic para saltar al tutorial
En la última lección, explicamos el ContentProvider, aquí lo aplicamos, obtenemos todos los contactos en el teléfono, iniciamos la devolución de llamada del Intent y regresamos con el resultado.

composición:
Inserte la descripción de la imagen aquí

<RelativeLayout 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"
    tools:context="${relativePackage}.${activityClass}" >

    <EditText
        android:id="@+id/et_main_number"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="请输入后选择一个联系人" />

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/et_main_number"
        android:onClick="toContractList"
        android:text="选择联系人" />

</RelativeLayout>

Haga clic en el botón para que aparezcan todos los contactos, use LIstView + BaseAdapter para lograr

id usa el propio sistema, por lo que podemos heredar ListActivity, el método getListView () puede obtener el objeto ListView

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

</ListView>

El diseño del elemento es dos TextView

<?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="wrap_content"
     android:padding="5dp"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="80dp"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textSize="18sp" />

    <TextView
        android:id="@+id/tv_number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textSize="18sp" 
        android:layout_marginLeft="18dp" />

</LinearLayout>

MainActivity.java

package com.hbk.contractlist;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends Activity {
    
    

	public EditText et_main_number;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
    
    
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		et_main_number = (EditText) findViewById(R.id.et_main_number);
	}
	
	public void toContractList(View v){
    
    
		//启动联系人列表界面,带回调
		startActivityForResult(new Intent(this, ContactListActivity.class), 1);
	}
	
	// 带结果返回
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
    
		if(requestCode==1&&resultCode==RESULT_OK){
    
    
			et_main_number.setText(data.getStringExtra("NUMBER"));
		}
		super.onActivityResult(requestCode, resultCode, data);
	}
}

ContractListActivity.java

package com.hbk.contractlist;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.ListActivity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

public class ContactListActivity extends ListActivity implements OnItemClickListener {
    
    

	
	public ContractAdapter adapter;
	public List<Map<String, String>> data = new ArrayList<Map<String,String>>();
	public ListView listview;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
    
    
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_contact_list);
		
		listview = getListView();
		adapter = new ContractAdapter();
		// 查询联系人数据
		ContentResolver resolver = getContentResolver();
		// 查询条件
		String[] projection = new String[]{
    
    Phone.DISPLAY_NAME,Phone.NUMBER};
		// 联系人的Uri固定的
		Cursor cursor = resolver.query(Phone.CONTENT_URI, projection , null, null, null);
		while(cursor.moveToNext()){
    
    
			Map<String, String> map = new HashMap<String, String>();
			map.put("name", cursor.getString(0));
			map.put("number", cursor.getString(1));
			data.add(map);
		}
		listview.setAdapter(adapter);
		listview.setOnItemClickListener(this);
	}
	class ContractAdapter extends BaseAdapter{
    
    

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

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

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

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
    
    
			if(convertView == null){
    
    
				convertView = View.inflate(ContactListActivity.this, R.layout.item_main, null);
			}
			Map<String,String> map = data.get(position);
			TextView nameTv = (TextView) convertView.findViewById(R.id.tv_name);
			TextView numberTv = (TextView) convertView.findViewById(R.id.tv_number);
			nameTv.setText(map.get("name"));
			numberTv.setText(map.get("number"));
			return convertView;
		}
		
	}
	@Override
	public void onItemClick(AdapterView<?> parent, View view, int position,
			long id) {
    
    
		Intent intent = getIntent();
		intent.putExtra("NUMBER", data.get(position).get("number"));
		// 设置数据返回
		setResult(RESULT_OK, intent);
		finish();
	}
}

Al realizar la prueba, puede crear varios contactos en el simulador.

Supongo que te gusta

Origin blog.csdn.net/huangbaokang/article/details/112505914
Recomendado
Clasificación