Android学习之——ListView
背景知识
ListView在Android应用中使用非常广泛,手机上必备的微博、网易新闻等,都使用了ListView。
定义
ListView是一个展示可滚动项的列表的视图集合(View Group)。通过适配器(Adapter)从内容源(例如一个数组或数据库查询)取得内容
然后将每个项转化为呈现在列表中的View,列表项自动地被插入到列表中。
Demo
ListView的实现过程:
准备数据---->使用动态数组保存数据----->构建Adapter(适配器)----->添加Adapter到listView上,并显示
MainActivity代码
1 package com.johntsai.listviewdemo; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7 8 import android.app.Activity; 9 import android.os.Bundle; 10 import android.view.View; 11 import android.widget.AdapterView; 12 import android.widget.AdapterView.OnItemClickListener; 13 import android.widget.ListView; 14 import android.widget.SimpleAdapter; 15 import android.widget.Toast; 16 17 public class MainActivity extends Activity { 18 private ListView listView; 19 private SimpleAdapter adapter; 20 //准备数据 21 private String[] listTitle = { 22 "2015年春运火车票今起发售", 23 "马尔代夫遭淡水危机 中国送水", 24 "中国5架战机飞跃日本宫古海峡" 25 }; 26 private String[] listContent = { 27 "可用网络、电话购票,3个时段可尝试\"捡漏\"", 28 "淡水生产装置受损,淡水供应告急,15万居民面临水荒", 29 "于6日飞跃宫古海峡,赴西太平洋训练" 30 }; 31 private List<Map<String,Object>> listItems; 32 //保存数据 33 private void getData(){ 34 listItems = new 35 ArrayList<Map<String,Object>>(); 36 for(int i = 0 ; i < listTitle.length; i++){ 37 Map<String,Object> listItem = 38 new HashMap<String, Object>(); 39 listItem.put("image",R.drawable.ic_launcher); 40 listItem.put("title", listTitle[i]); 41 listItem.put("content", listContent[i]); 42 listItems.add(listItem); 43 } 44 } 45 @Override 46 protected void onCreate(Bundle savedInstanceState) { 47 super.onCreate(savedInstanceState); 48 setContentView(R.layout.activity_main); 49 50 getData(); 51 listView = (ListView)findViewById(R.id.listView); 52 //构建Adapter 53 //第一个参数:context,即与适配器的View运行的Context 54 //第二个参数:data 55 //第三个参数:resource,为listView项定义视图的布局id 56 //第四个参数:from 57 //第五个参数:to,要显示到的View的id 58 adapter = new SimpleAdapter(this, 59 listItems , 60 R.layout.listview_item, 61 new String[] {"image","title","content"}, 62 new int[] {R.id.list_image,R.id.item_title,R.id.item_content}); 63 //添加adapter到listView并显示 64 listView.setAdapter(adapter); 65 66 //为listView项添加响应监听事件 67 listView.setOnItemClickListener(new OnItemClickListener() { 68 69 @Override 70 public void onItemClick(AdapterView<?> parent, View view, 71 int position, long id) { 72 Toast.makeText(MainActivity.this, 73 "你点击的是标题为"+listTitle[position], 74 Toast.LENGTH_LONG).show(); 75 } 76 }); 77 78 } 79 }
MainActivity界面布局文件
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical"> 6 7 <ListView 8 android:id="@+id/listView" 9 android:layout_width="match_parent" 10 android:layout_height="wrap_content" 11 > 12 </ListView> 13 </LinearLayout>
ListView项布局文件
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:id="@+id/ListViewItem" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:orientation="horizontal" > 7 8 <ImageView 9 android:id="@+id/list_image" 10 android:layout_width="50dp" 11 android:layout_height="50dp" 12 android:src="@drawable/ic_launcher" 13 /> 14 <LinearLayout 15 android:id="@+id/list_content" 16 android:layout_width="fill_parent" 17 android:layout_height="50dp" 18 android:orientation="vertical" 19 > 20 <TextView 21 android:id="@+id/item_title" 22 android:layout_width="match_parent" 23 android:layout_height="0dp" 24 android:layout_weight="1" 25 /> 26 <TextView 27 android:id="@+id/item_content" 28 android:layout_width="match_parent" 29 android:layout_height="0dp" 30 android:layout_weight="1" 31 android:textSize="10sp" 32 android:textColor="@android:color/darker_gray" 33 /> 34 </LinearLayout> 35 </LinearLayout>
Demo运行效果: