初识ListView
来源:互联网 发布:vba提取网页数据 编辑:程序博客网 时间:2024/04/28 05:56
初识ListView
ListView组件是Android中最常用的组件之一,几乎所有的应用程序都会用到它。当我们需要显示大量的数据在手机屏幕上时,可以借助ListView来实现。
(1)ListView的简单用法
我们需要先建立一个工程,然后修改里面的activity_main.xml文件
<LinearLayout 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"android:orientation="vertical"><ListView android:id="@+id/lv"android:layout_width="match_parent"android:layout_height="match_parent"></ListView></LinearLayout>
这里我们需要指定控件的id,控件的高和宽都用match_parent。
接下来就是写MainActivity中的代码。
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //得到ListView组件 ListView lv =(ListView) findViewById(R.id.lv); //需要显示的数据 String[] objects=new String[]{"张三","李四","王五","赵六","小强", "旺财","小六子","三德子","猪八戒","孙悟空","唐三藏","牛魔王","红孩儿"}; //将数据与适配器关联 lv.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, objects)); }}
我们在MainAvtivity里面做了三件事:(1)、获取ListView组件。(2)、得到一个适配器并设置了要显示的数据。(3)、将组件与适配器相关联。这样一个ListView显示数据就完成了。
事实上,这样只显示显示一个TextView还是太过单调。我们应该对ListView界面进行定制,显示我们需要的复制的样子。下面我们将在ListView中的每个条目中显示一张图片,旁边并配上文字。
(2)定制ListView界面
我们在ListView中显示一个人的照片的姓名。这样我们就先需要建立一个人类。
public class Person { private int imageId; private String name; public Person(int imageId, String name) { super(); this.imageId = imageId; this.name = name; } public Person() { super(); // TODO Auto-generated constructor stub } public int getImageId() { return imageId; } public void setImageId(int imageId) { this.imageId = imageId; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Person [imageId=" + imageId + ", name=" + name + "]"; }}
然后我们在layout文件夹下面自定义一个布局文件person_item.xml,这个布局文件将加载到ListView中。
<?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" ><ImageView android:id="@+id/iv_1" android:layout_width="wrap_content" android:layout_height="wrap_content"/><TextView android:id="@+id/tv_1" android:layout_width="wrap_content" android:layout_height="wrap_content"/></LinearLayout>
在这个布局中,我们定义了一个ImageView来显示用户照片,一个TextView用来显示姓名。
接下来我们需要创建一个自定义的适配器了,这个适配器继承自ArrayAdapter,并将泛型指定为person类型。
class PersonAdapter extends ArrayAdapter<Person>{public PersonAdapter(Context context, int textViewResourceId, List<Person> objects) { super(context,textViewResourceId, objects);}@Overridepublic View getView(int position, View convertView, ViewGroup parent) { //得到条目中的person对象 Person person =getItem(position); View view; //优化性能,防止内存溢出 if(convertView == null){ //加载布局person_item.xml view =View.inflate(MainActivity.this, R.layout.person_item, null); }else{ view=convertView; } ImageView iv_1=(ImageView) view.findViewById(R.id.iv_1); TextView tv_1=(TextView) view.findViewById(R.id.tv_1); iv_1.setImageResource(person.getImageId()); tv_1.setText(person.getName()); return view;}
最后完成MainAcitity中的代码。
public class MainActivity extends Activity { List<Person> personList=new ArrayList<Person>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView lv =(ListView) findViewById(R.id.lv); //初始化personList集合 initPerson(); //创建适配器 PersonAdapter personAdapter =new PersonAdapter(MainActivity.this, R.layout.person_item, personList); lv.setAdapter(personAdapter); } //初始化personList集合 private void initPerson() { // TODO Auto-generated method stub Person person=new Person(R.drawable.ic_launcher,"张三"); personList.add(person); Person person1=new Person(R.drawable.ic_launcher,"张飞"); personList.add(person1); Person person2=new Person(R.drawable.ic_launcher,"李阳"); personList.add(person2); Person person3=new Person(R.drawable.ic_launcher,"小王"); personList.add(person3); Person person4=new Person(R.drawable.ic_launcher,"老王"); personList.add(person4); Person person5=new Person(R.drawable.ic_launcher,"岳飞"); personList.add(person5); Person person6=new Person(R.drawable.ic_launcher,"赵四"); personList.add(person6); Person person7=new Person(R.drawable.ic_launcher,"刘能"); personList.add(person7); Person person8=new Person(R.drawable.ic_launcher,"谢广坤"); personList.add(person8); Person person9=new Person(R.drawable.ic_launcher,"小沈阳"); personList.add(person9); Person person10=new Person(R.drawable.ic_launcher,"孙悟空"); personList.add(person10); Person person11=new Person(R.drawable.ic_launcher,"猪八戒"); personList.add(person11); } }
(2)ListView的点击事件
ListView中的点击事件不能用setOnClickListener(),而是用setOnItemClickListener()。在我们获取到ListView组件之后,就可以给她添加点击事件了。
ListView lv =(ListView) findViewById(R.id.lv);lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub Person person =personList.get(position); //创建对话框 AlertDialog.Builder builder =new AlertDialog.Builder(MainActivity.this); builder.setTitle("第"+position+"个条目被点击了"); builder.setMessage(person.getName()+",您好"); builder.setPositiveButton("确认", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "您点击了确认按钮", 0).show(); } }); builder.setNegativeButton("退出", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "您点击了确认按钮", 0).show(); } }); } });
- 初识ListView
- listView初识
- 初识listview,写个小demo
- React native ListView初识
- 初识react-native ListView
- Android15之控件ListView(初识)
- 初学安卓路之初识ListView
- ListView的新朋友-------RecyclerView初识
- 3min初识ListView(1)-BaseAdapter方法实现
- 3min初识ListView(2)-getView和convertView
- 3min初识ListView(6)-数组适配器介绍
- 3min初识ListView(8)-源码+Demo搞定SimpleAdapter
- Android之旅第四站——初识ListView…
- Android 开发:(五)初识ListView(列表布局)
- Android零基础入门第37节:初识ListView
- 初识
- 初识
- 初识
- 利用栈的中序遍历二叉树的非递归算法
- JAVA 中BIO,NIO,AIO的理解
- jQuery 删除、复制和替换元素
- 传统IO
- XMPP聊天之Openfire后台的安装和配置
- 初识ListView
- java 接口 抽象类 继承 重载 重写 多态
- 多态的成员(变量、方法)访问特点【非静态】
- #android#java的常用类
- 设计模式之单例模式
- 在ubuntu中配置java环境并运行java程序
- 在Service中弹出对话框
- 异常类型
- Nginx源码剖析