19_采用ListView实现数据列表显示
--------------------------------------------------
ListView显示界面的设置:
--------------------------
姓名 电话 存款
老周 12345687895 41111
老方 12515466874 5000
------------------------------
1.在使用SimpleCursorAdapter adapter=new SimpleCursorAdapter
(this,R.layout.item,cursor,new String[]{"name","phone","amount"},new int[]
{R.id.name,R.id.phone,R.id.amount});这个SimpleCursorAdapter适配器的时候:
出现这个异常:
-----------------------------------------------
03-12 23:23:22.934: E/AndroidRuntime(23439): Caused by:
java.lang.IllegalArgumentException: column '_id' does not exist
--------------------------------------------------------------------
这个异常跟SimpleCursorAdapter ,这个源码有关:
可以查看源码,会有说明:
---------------------------
方法:1.把数据库表中的主键id改成:_id
2.处理查询后的结果集:主键起一个别名:
select personid as _id,name,phone,amount from person order by personid asc
limit ?,?
----------------------------------------------
1.使用android自带的两种适配器,实现listview显示的代码:
在DBSQLIte项目的基础上,复制一份,并重新命名:ListViewDBSQLIte
2./ListViewDBSQLIte/src/com/credream/db/DBSQLIteActivity.java
package com.credream.db;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.security.auth.PrivateCredentialPermission;
import com.credream.adapter.PersonAdapter;
import com.credream.entity.Person;
import com.credream.service.PersonService;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class DBSQLIteActivity extends Activity {
private ListView listView;
private PersonService personService;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
personService=new PersonService(this);
listView=(ListView)this.findViewById(R.id.listView);
//给每个条目设置监听对象
listView.setOnItemClickListener(new ItemClickListener ());
//show();
//测试使用SimpleCursorAdapter 适配器的时候用这个
//show2();
//测试使用自定义适配器的时候,用这个
show3();
}
final class ItemClickListener implements OnItemClickListener{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id)
{
// AdapterView<?> parent指的是用户点击的一个view对象, View view就是点击的那个view
控件, int position就是所点击的那一条值,在list中的索引值, long id就是listview在内
部进行排序用的
ListView lvView=(ListView)parent;
//使用自定义的适配器使用方法:
Person person=(Person)lvView.getItemAtPosition(position);
Toast.makeText(getApplicationContext(), person.getId().toString(), 1).show();
//使用cursor,也就是show2()的时候,cursor适配器的用法
//SimpleCursorAdapter 适配器来显示listView控件
/*Cursor cursor=(Cursor)lvView.getItemAtPosition(position);
int personid=cursor.getInt(cursor.getColumnIndex("_id"));
Toast.makeText(getApplicationContext(), personid+"", 1).show();*/
}
}
private void show()
{
List<Person> persons=personService.getScrollData(0, 20);
List<HashMap<String, Object>> data=new ArrayList<HashMap<String,Object>>();
for(Person person:persons){
HashMap<String, Object> item=new HashMap<String, Object>();
item.put("name", person.getName());
item.put("phone", person.getPhone());
item.put("amount", person.getAmount());
data.add(item);
}
//适配器:SimpleAdapter 和 item.xml中的条目显示
SimpleAdapter adapter=new SimpleAdapter(this,data,R.layout.item,new
String[]{"name","phone","amount"},new int[]{R.id.name,R.id.phone,R.id.amount});
//
data,R.layout.item,把数据data绑定到R.layout.item上,也就是item.xml
指定的格式
//把name 这个key指向的值,指定到name显示控件上
listView.setAdapter(adapter);
/*SimpleAdapter 的内部工作原理,将data当然以hashMap的形式,让这些数据按照,key和R.id
中的控件对应的形式显示
内部显示的实现过程:
* int total=adapter.getCount();
//取得总素,然后迭代,然后调用View显示,(显示的时候获取屏幕高度,然后获取每个显示控件
的高度,然后计算出每页显示多少个项)
int perpage=7;//
for(int i=0;i<perpage;i++){
View view=adapter.getView(i, , parent);
//用于得到条目的view对象
*/
}
//SimpleCursorAdapter 适配器来显示listview
private void show2(){<
补充:移动开发 , Android ,