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());}}



0 0
原创粉丝点击