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