android ListView使用的三种方法汇总(通过继承BaseAdapter,使用SimpleAdapter和SimpleCursorAdapter)
来源:互联网 发布:封闭式耳机 知乎 编辑:程序博客网 时间:2024/05/16 09:47
android中使用ListView显示列表,共有三种实现方式:
分别是通过继承baseAdapter,直接使用simpleAdapter和simplecursoradapter三种方式
下面我们直接通过代码来看一下实现的过程,代码中有详细的注释,所以,不再详细介绍三种方法的实现方式、
在实现三种方式之前,先定义一个xml文件来显示每一个item
<?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="match_parent"
android:orientation="horizontal" >
<TextView
android:textSize="30sp"
android:layout_width="0sp"
android:id="@+id/personid"
android:layout_height="wrap_content"
android:layout_weight="1"
/>
<TextView
android:textSize="30sp"
android:layout_weight="3"
android:layout_width="0sp"
android:id="@+id/name"
android:layout_height="wrap_content"
/>
<TextView
android:layout_width="0sp"
android:layout_weight="2"
android:textSize="30sp"
android:id="@+id/balance"
android:layout_height="wrap_content"
/>
</LinearLayout>
第一种:baseadapter
package com.example.sqllite;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class BaseAdapterActivity extends Activity {
ListView list;
List<Person> persons = new ArrayList<Person>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = (ListView) this.findViewById(R.id.list);
// 查询数据库获得person的集合
PersonDAO dao = new PersonDAO(getApplicationContext());
persons = dao.queryAll();
//为list添加adapter
list.setAdapter(new MyAdapter());
//添加监听事件
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//parent是点击时间发生的adapter,position是点击的位置,即item的位置
Person p=(Person) parent.getItemAtPosition(position);//因为getItemAtPosition是通过调用getItem来获得
//object,因为在MyAdapter中getItem返回的是person,所以通过
//调用这个方法返回的是person
Toast.makeText(getApplicationContext(), p.getId()+"", 0).show();
}
});
}
//自定义adapter,继承baseadapter
class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return persons.size();//获得adapter中item的数量
}
@Override
public Object getItem(int position) {
return persons.get(position);//获得位于position位置的item
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return persons.get(position).getId();///获得位于position位置的item的ID
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Person p = persons.get(position);//获得位置为position的person
//创建View 用xml填充View并返回
View view = View.inflate(getApplicationContext(), R.layout.item,
null);
TextView tv1 = (TextView) view.findViewById(R.id.personid);// 如果直接通过findViewById查询查询的并不是View下的,而是mainactivity下的
TextView tv2 = (TextView) view.findViewById(R.id.name);
TextView tv3 = (TextView) view.findViewById(R.id.balance);
// 为view内的三个控件赋值
tv1.setText(p.getId().toString());
tv2.setText(p.getName().toString());
tv3.setText(p.getBalance().toString());
return view;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
第二种:直接使用simpleadapter
package com.example.sqllite;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
public class SimpleAdapterActivity extends Activity {
List<Person> list;
ListView view;
List<HashMap<String, Object>> personList ;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PersonDAO dao = new PersonDAO(getApplicationContext());
list = dao.queryAll();
view = (ListView) this.findViewById(R.id.list);
//list中存放的是map 而map中每个key是属性名称,value是person中的属性值
personList = new ArrayList<HashMap<String, Object>>();
//循环遍历list,将每一个person加入到map中
for (Person p : list) {
HashMap<String,Object> map=new HashMap<String, Object>();
map.put("ida", p.getId());
map.put("namea", p.getName());
map.put("balancea", p.getBalance());
personList.add(map);
}
//为ListView添加adapter,simpleadapter中第二个参数是List<HashMap<String, Object>>
//new String[] { "ida", "namea", "balancea"}代表map中的键值,new int[] { R.id.personid, R.id.balance, R.id.name }
//代表R.layout.item,中的textView的id
view.setAdapter(new SimpleAdapter(getApplicationContext(), personList,
R.layout.item, new String[] { "ida", "namea", "balancea" },
new int[] { R.id.personid, R.id.balance, R.id.name }));
view.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
HashMap<String,Object> a=(HashMap<String, Object>) parent.getItemAtPosition(position);//因为在simpleadapter中放入的是List<HashMap<String, Object>>,所以返回的是hashmap
Toast.makeText(getApplicationContext(), (String)a.get("namea"),0).show();
}
});
}
}
第三种:直接使用simplecursoradapter
package com.example.sqllite;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class SimpleCursorAdapterActivity extends Activity {
ListView listView;
Cursor c;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) this.findViewById(R.id.list);
PersonDAO dao = new PersonDAO(getApplicationContext());
c = dao.queryCursor();
// 此处查询时id必须为_id
listView.setAdapter(new SimpleCursorAdapter(getApplicationContext(),
R.layout.item, c, new String[] { "_id", "name", "balance" },
new int[] { R.id.personid, R.id.name, R.id.balance }));
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Cursor c = (Cursor) parent.getItemAtPosition(position);// 传入的是Cursor所以返回的是Cursor ,源码// return (adapter== null || position <//0)?null : adapter.getItem(position);
String name = null;
if (c.moveToNext()) {
name = c.getString(c.getColumnIndex("name"));
}
Toast.makeText(getApplicationContext(), name, 0).show();
}
});
}
}
- android ListView使用的三种方法汇总(通过继承BaseAdapter,使用SimpleAdapter和SimpleCursorAdapter)
- SimpleAdapter 和 SimpleCursorAdapter的使用
- ListView使用SimpleAdapter,或者继承BaseAdapter重写
- 我的Android进阶之旅------>Android ListView 应用解析(使用ArrayAdapter,SimpleAdapter和SimpleCursorAdapter适配器)
- Android 中ArrayAdapter,SimpleAdapter,BaseAdapter三种适配器的使用
- Android 中ArrayAdapter,SimpleAdapter,BaseAdapter三种适配器的使用
- 使用详解及源码解析Android中的Adapter、BaseAdapter、ArrayAdapter、SimpleAdapter和SimpleCursorAdapter
- 使用详解及源码解析Android中的Adapter、BaseAdapter、ArrayAdapter、SimpleAdapter和SimpleCursorAdapter
- 使用详解及源码解析Android中的Adapter、BaseAdapter、ArrayAdapter、SimpleAdapter和SimpleCursorAdapter
- ListView中的SimpleAdapter和BaseAdapter使用
- 关于ListView使用BaseAdapter和SimpleAdapter适配器
- Android之ListView使用方法-ArrayAdapter-SimpleCursorAdapter-SimpleAdapter-BaseAdapter
- Android的 SimpleAdapter和SimpleCursorAdapter
- ArrayAdapter, SimpleAdapter 和BaseAdapter的使用范例
- BaseAdapter(和SimpleAdapter)的使用
- android Adapter综合使用(ArrayAdapter、SimpleAdapter、BaseAdapter在ListView和GridView中的使用)
- SimpleAdapter,Android ListView使用BaseAdapter与ListView的优化,SQL命令
- Android ListView 和 BaseAdapter 的使用
- 一个小小的疏忽,耽误三个小时的时间。
- 掃描多邊形填充算法
- 各种字符串Hash函数比较
- 关于static的一段程序
- The requested list key could not be resolved as a collection。。。。
- android ListView使用的三种方法汇总(通过继承BaseAdapter,使用SimpleAdapter和SimpleCursorAdapter)
- Delphi反调试【初级】检测法
- 傅立葉變換的物理意義
- jquery_easyui_中文解析
- Ubuntu Linux 安装 .rar 解压和压缩文件
- Scala走起
- C++中智能指针的设计和使用 .
- WIN7下配置Eclipse编写C++环境
- 99乘法表 计124-4 耿娜