android content provider get contacts practice

I found a giant artificial intelligence learning website a few days ago, which is easy to understand and humorous. I can’t help but share it with everyone. Click to jump to the tutorial
In the last lecture, we explained the ContentProvider, here we apply it, get all the contacts on the phone, and start the callback of the Intent and return with the result.

layout:
Insert picture description here

<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>

Click the button, pop up all contacts, use LIstView+BaseAdapter to achieve

id uses the system's own, so we can inherit ListActivity, getListView() method can get ListView view object

<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>

The item layout is two 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();
	}
}

When testing, you can create several contacts on the simulator.

Guess you like

Origin blog.csdn.net/huangbaokang/article/details/112505914