用ListView搭建手机通讯录

来源:互联网 发布:mac版的优酷能缓存吗 编辑:程序博客网 时间:2024/06/05 11:34

1.建立ListItem布局文件   接上篇搭建数据库,其中的数据都是从数据库中取出的

新建两个 xml 文件 

main 文件


每个item 子项 的自定义值


3.主体要实现的功能文件

package com.example.sqlite;import java.util.List;import www.csdn.domain.UserImpl;import www.csdn.domain.Users;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.CheckedTextView;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import com.example.splite.dao.UserDao;public class MainActivity extends Activity implements OnItemClickListener{//获取控件private ListView lv_users;private List<Users> entities; //M 模型层private UserDao userDao;private DataBaseHelper dataBaseHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//设置显示的视图setContentView(R.layout.activity_main);//获取显示的控件lv_users=(ListView) findViewById(R.id.lv_users);//视图层dataBaseHelper=new DataBaseHelper(this);// 使用数据库   dataBaseHelperuserDao=new UserImpl(dataBaseHelper);// 1.获取显示的数据entities=userDao.findAll();//设置显示的数据 adapter 作为控制层()//2.创建自定义的adapter对象     之前要先查询到数据    才能得到MyAdapter adapter=new MyAdapter();lv_users.setAdapter(adapter);//BaseAdapter  抽象类//注册点击事件 Item lv_users.setOnItemClickListener(this); }//继承了 BaseAdapter 而BaseAdapter 实现了 ListAdapterclass MyAdapter extends BaseAdapter{//返回总条目的数量@Overridepublic int getCount() {return entities.size();}//@Overridepublic Object getItem(int position) {return entities.get(position);//如果是null  则获取空// Users entity=(Users) parent.getItemAtPosition(position);}//@Overridepublic long getItemId(int position) {return position;// 对应方法   parent.getItemIdAtPosition(position);//应该是id= position  条目 id 和position是同一个值}//position 从0开始@Overridepublic View getView(int position, View convertView, ViewGroup parent) {//获取当前位置显示的对象//return SingleChoice(position);Users entity=entities.get(position);View v=View.inflate(MainActivity.this, R.layout.a, null);TextView tv_id = (TextView) v.findViewById(R.id.tv_id);TextView tv_name= (TextView) v.findViewById(R.id.tv_name);TextView tv_age=(TextView) v.findViewById(R.id.tv_age);TextView tv_phone=(TextView) v.findViewById(R.id.tv_phone);tv_id.setText(""+entity.getUserId());tv_name.setText("姓名:"+entity.getUserName());tv_age.setText("年龄:"+entity.getUserAge());tv_phone.setText("电话:"+entity.getUserPhone());return v;}public View SingleChoice(int position) {Users entity=entities.get(position);//inflate 填充   创建每个条目显示的控件对象  返回控件  单选   View v=View.inflate(MainActivity.this, android.R.layout.simple_list_item_single_choice, null);CheckedTextView  tv=(CheckedTextView) v.findViewById(android.R.id.text1);// ^_^ 如果用checkBox代替 TextView 情况 下就可以出现 单选 多选 //TextView tv=new TextView(MainActivity.this);tv.setText(entity.getUserName()+"-"+entity.getUserPhone());tv.setHeight(30);return tv;}public View multipleChoice(int position) {Users entity=entities.get(position);//inflate 填充   创建每个条目显示的控件对象  返回控件  单选   View v=View.inflate(MainActivity.this, android.R.layout.simple_list_item_multiple_choice, null);CheckedTextView  tv=(CheckedTextView) v.findViewById(android.R.id.text1);// ^_^ 如果用checkBox代替 TextView 情况 下就可以出现 单选 多选 //TextView tv=new TextView(MainActivity.this);tv.setText("姓名:"+entity.getUserName()+"电话:"+entity.getUserPhone()+"年龄:"+entity.getUserAge());tv.setHeight(60);return tv;}}// AdapterView 继承 Adapter 而 ListAdapter 继承了 Adapter //AdapterView  容器     封装 当前的parent.getItemAtPosition(position);@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {//咋么获取点击我的数据Users entity=(Users) parent.getItemAtPosition(position);//是什么  在 getItem中获取数据Toast.makeText(MainActivity.this, "打电话给"+entity.getUserName(), Toast.LENGTH_LONG).show();//思考?  作业 点操作时 直接弹出对话框 看是1)发短信给 2 )还是打电话  选项  功能//获取其中摸个单一的值TextView tv_id = (TextView) view.findViewById(R.id.tv_id);Toast.makeText(MainActivity.this, "发短信给"+tv_id.getText(), Toast.LENGTH_LONG).show();String phoneStr=entity.getUserPhone();final int phone=Integer.parseInt(phoneStr);new AlertDialog.Builder(this).setMessage("我是选择框").setNegativeButton("打电话", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Intent intent=new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+phone));startActivity(intent);}}).setNeutralButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Intent intent=new Intent();startActivity(intent);}}).setPositiveButton("发短信", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Intent intent=new Intent(Intent.ACTION_SENDTO,Uri.parse("smsto:"+phone));startActivity(intent);}}).create().show();}}
4.添加权限

<uses-permission android:name="android.permission.SEND_SMS"/>
  <uses-permission android:name="android.permission.CALL_PHONE"/>

5.功能结果




0 0
原创粉丝点击