android学习笔记1 listview
来源:互联网 发布:linux修改文件名 编辑:程序博客网 时间:2024/05/16 06:13
1.自定义ListView和ArrayAdapter适配器的使用。
ListAdapter继承自Adapter,是listview和其里边数据的适配器。
ArrayAdapter是ListAdapter的一个直接子类。作用就是将一个数组和ListView绑定起来。通常由ArrayAdapter适配的listview每一项 通常只有一个Textview,而TextView显示的内容就是数组里边的对象调用toString()方法后生成的字符串。
android.R.layout.simple_list_item_1,每一项只有一个TextView。
android.R.layout.simple_list_item_2,每一项有两个TextView。
android.R.layout.simple_list_item_single_choice,每一项有一个TextView,但是这一项可被选择。
注意这个类是继承自ActionBarActivity的,因为我们是自定义的listview
package com.example.ex07_list;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.widget.ArrayAdapter;import android.widget.ListView;public class List1Activity extends ActionBarActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);//自定义一个listviewListView listview = new ListView(this);//新建一个列表,将context传递给构造函数String[] data = {"111","222","333","444","555"};//自定义数据listview.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data));//将listview,和ArrayAdapter绑定。
ArrayAdapter有三个参数组成,第一个参数是context,即上下文的引用。第二个参数是布局(可以用系统布局,也可以用自定义的布局,稍后有讲解)。第三个参数就是要显示的数据了。setContentView(listview);//将自定义的listview直接显示出来}}
2.自定义listview和SimpleAdapter的使用
SimpleAdapter是ListView的直接子类。通过SimpleAdapter可以让ListView的内容和布局更加个性化。通常将ListView的布局写在一个xml文件里,然后通过setAdapter函数把布局文件里的ID和data数据里的数据连接起来。但是也可以不用自定义的布局,也可以用系统提供的布局,那么需要把第三个参数改为系统的布局,第五个参数改为android.R.layout.text1,android.R.layout.text2 text1和text2是系统 提供的。
注意这个类是继承自ActionBarActivity的,因为我们是自定义的listview
package com.example.ex07_list;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.view.View;import android.widget.AdapterView;import android.widget.ListView;import android.widget.SimpleAdapter;public class List2Activity extends ActionBarActivity {ArrayList<Map<String,Object>> data = new ArrayList<Map<String,Object>>();//List<? extends Map<String, ?>> data = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);ListView listview = new ListView(this);//自定义一个listview,把context对象传入PrepareData();//初始化数据//使用自己的布局格式来布局SimpleAdapter adapter = new SimpleAdapter(this,data,R.layout.listitem,new String[] {"姓名","性别"},new int[]{R.id.mView1,R.id.mView2});//第一个参数就是连接上下文的。第二个参数是基于Map类型的list。第三个参数是自己创建的自定义xml文件,即布局文件,里边有左右两个textview,ID分别为mView1,mView2。第四个参数是名字的索引,为了在数据的ArrayList中的每一个item中用的。第五个参数是一个TextView的ID的数组。//使用simple_list_item_2进行布局//SimpleAdapter adapter = new SimpleAdapter(this,data,android.R.layout.simple_list_item_2,new String[] {"姓名","性别"}, new int[]{android.R.id.text1,android.R.id.text2});listview.setAdapter(adapter);setContentView(listview);ListView.OnItemClickListener listener = new ListView.OnItemClickListener() {public void onItemClick(AdapterView<?> parent,View view,int position,long id) {setTitle(parent.getItemAtPosition(position).toString());}};listview.setOnItemClickListener(listener);}//提取准备好需要在ListView里边显示的数据private void PrepareData() {Map<String,Object> item;//准备好要在listview显示的数据。每一个元素是一个Map集合item = new HashMap<String,Object>();item.put("姓名", "张三小朋友");item.put("性别", "男");data.add(item);item = new HashMap<String,Object>();item.put("姓名", "王五同学");item.put("性别", "男");data.add(item);item = new HashMap<String,Object>();item.put("姓名", "小李同学");item.put("性别", "女");data.add(item);}}listitem.xml文件如下:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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" tools:context=".List2Activity" > <TextView android:id="@+id/mView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="45dp" android:layout_marginTop="79dp" android:textSize="20sp" android:text="TextView" /> <TextView android:id="@+id/mView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/mView1" android:layout_alignBottom="@+id/mView1" android:layout_alignParentRight="true" android:layout_marginRight="76dp" android:textSize="20sp" android:text="TextView" /></RelativeLayout>
3.在单击了ListView之后会有一些动作。2中的这段代码就实现了单击ListView的某一项之后,会把ListView那一项的数据显示在title上。
ListView.OnItemClickListener listener = new ListView.OnItemClickListener() {public void onItemClick(AdapterView<?> parent,View view,int position,long id) {//onItemClick是回调函数,即系统点击textview的某一项时会触发这个函数。setTitle(parent.getItemAtPosition(position).toString());//获取单击的那个位置的数据,并设置为title}};listview.setOnItemClickListener(listener);
4.ListActivity类
很多情况下每一个Activity里边都只有一个ListView的,而且会占满一满屏。所以android提供了一个ListActivity类。
每一个ListActivity都和一个布局文件相关联,而且基本都是这个固定模式。如下listactivity.xml
而且必须定义一个ListView,而且这个ListView的ID必须是"@id/android:list",这个id是android系统预设的,也就是说ListActivity当中的android系统可以通过这个预设的ID得到这个ListView。
还有一个必须有,但是没必要非定义为"@id/android:empty"的textview。虽然不是必须这样定义,但是强烈建议这样去定义哦,因为当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="vertical" > <ListView android:id="@+id/android:list" android:layout_width="fill_parent" android:layout_height="fill_parent" > </ListView> <TextView android:id="@id/android:empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="对不起,没有数据显示" ></TextView></LinearLayout>
不像前两个类一样,是自定义的listview,所以是继承自ActionBarActivity的,这个类的使用是继承自ListActivity的。
类定义如下:
package com.example.ex07_list;import android.app.ListActivity;import android.os.Bundle;import android.view.View;import android.widget.ArrayAdapter;import android.widget.ListView;public class List3Activity extends ListActivity{@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.listactivity);String[] data = {"111","222","333","444","555"};setListAdapter(new ArrayAdapter<String> (this,android.R.layout.simple_list_item_1,data));}protected void onListItemClick(ListView listview,View v,int position,long id) {super.onListItemClick(listview, v, position, id);setTitle(listview.getItemAtPosition(position).toString());}}
- android学习笔记1 listview
- Android学习笔记--ListView
- Android ListView 学习笔记
- Android ListView学习笔记
- Android学习笔记-ListView
- Android学习笔记之ListView(1)
- android组件ListView学习笔记
- android学习笔记之ListView
- android学习笔记 Listview adapter
- android学习笔记19:ListView
- Android学习笔记之ListView
- Android学习笔记之ListView
- Android学习笔记:Activity-ListView
- [Android学习笔记2]ListView
- Android学习笔记(九)ListView
- android学习笔记3-listView
- Android学习笔记之ListVIew。
- 【android控件学习笔记】ListView
- RPG游戏学习——2.rpgmaker事件学习1
- 关于TCP/IP的三次握手和四次挥手解释
- C#多线程处理webbrowser及InvokeMember(click)无响应的问题
- PLSQL_Database Link的基本概念和用法(概念)
- 数据结构笔记——第七章 查找技术
- android学习笔记1 listview
- 我为什么当程序员
- X64下的解析句柄表
- git使用小结(安装,git添加版本库,git与github链接)
- 分析JDBC ResultSet
- sql plus 和 pl/sql无法连接远程oracle数据库
- 《HotSpot实战》笔记1启动
- python ucs-2与ucs-4编码方式判断
- java.lang.Long cannot be cast to java.lang.Integer!