Android开发(11)-利用listview控件显示person表中的所有数据(并实现点击触发拨号程序)
核心代码如下:
MainActivity.java
- package com.example.lession05_dbs;
- import java.util.List;
- import android.app.Activity;
- import android.content.Intent;
- import android.net.Uri;
- import android.os.Bundle;
- import android.view.Menu;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.AdapterView;
- import android.widget.BaseAdapter;
- import android.widget.ListView;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.example.lession05_dbs.dao.PersonDao;
- import com.example.lession05_dbs.dao.PersonDaoImpl;
- import com.example.lession05_dbs.domain.Person;
- public class MainActivity extends Activity {
- //listView控件
- public ListView listView;
- //显示所有的用户信息
- public List<Person> persons;
- //数据库操作的对象
- public PersonDao personDao ;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- //实例化数据库操作对象
- personDao = new PersonDaoImpl(MainActivity.this);
- //执行查询数据
- persons = personDao.findAll();
- //根据id获取控件对象
- listView = (ListView) findViewById(R.id.lv_persons);
- //设置显示的数据 Adpater
- listView.setAdapter(new PersonListAdapter());
- //listView注册事件
- listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- /**
- * parent :listView
- * view 每个条目控件
- * position:条目所在的位置
- * id:行号 0
- */
- @Override
- public void onItemClick(AdapterView<?> parent, View view,
- int position, long id) {
- TextView tv = (TextView) view;
- // Toast.makeText(getApplicationContext(), tv.getText().toString(),Toast.LENGTH_LONG).show();
- //获取控件的文本
- /* String text = tv.getText().toString();
- //拆分
- String arr[] = text.split("-");
- //得到电话
- String phone = arr[1];
- //意图
- Intent intent = new Intent();
- //设置动作
- intent.setAction(Intent.ACTION_CALL);
- //设置数据
- intent.setData(Uri.parse("tel:"+phone));
- //执行意图
- startActivity(intent);*/
- //parent listView
- Person p = (Person) parent.getItemAtPosition(position); //返回值 实际就是getItem返回的值
- /* //意图
- Intent intent = new Intent();
- //设置动作
- intent.setAction(Intent.ACTION_CALL);
- //设置数据
- intent.setData(Uri.parse("tel:"+p.getPhone()));
- //执行意图
- startActivity(intent);
- */
- // Toast.makeText(getApplicationContext(), p.getName(), Toast.LENGTH_LONG).show();
- int lid = (int) parent.getItemIdAtPosition(position);
- //
- Toast.makeText(getApplicationContext(), lid+"", Toast.LENGTH_LONG).show();
- }
- });
- }
- @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;
- }
- class PersonListAdapter extends BaseAdapter{
- //告诉你有多少个条目
- @Override
- public int getCount() {
- // TODO Auto-generated method stub
- return persons.size();
- }
- //返回这个为控件对应的数据
- @Override
- public Object getItem(int position) {
- // TODO Auto-generated method stub
- return persons.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) {
- //创建一个显示的控件 每个条目对应的控件
- TextView tv = new TextView(MainActivity.this);
- tv.setText(persons.get(position).getName()+"-"+persons.get(position).getPhone());
- return tv;
- }
- }
- }
<uses-permission android:name="android.permission.CALL_PHONE"/>
其他实体类,接口 和实现类,参见上篇博文
点击打开链接