android学习--视图列表(ListView和ListActivity)
来源:互联网 发布:java web 开发 编辑:程序博客网 时间:2024/05/01 16:02
说明:
视图列表(ListView和ListActivity)与AutoComplete、Spinner类似,它们都需要一个供显示的列表项,可以需要借助于内容Adapter提供显示列表项
创建ListView有两种方式:
(1)直接使用ListView进行创建
(2)Activity继承ListActivity
ListView的常用XML属性
下面分别用两种方式创建ListView
方式一:直接使用ListView进行创建
(1) main_activity.xml
下面布局两个listView,一个基于数组,一个基于Adapter
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/linearlayout" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:entries="@array/language" /> <TextView android:layout_width="fill_parent" android:layout_height="30dp"/> <ListView android:id="@+id/listView2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:headerDividersEnabled="true" android:footerDividersEnabled="true" android:divider="@drawable/img02"/> </LinearLayout>
(2) strings.xml 存放listView1内容数组
<?xml version="1.0" encoding="utf-8"?><resources> <string name="app_name">ListView</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string-array name="language"> <item>汉语</item> <item>韩语</item> <item>英语</item> <item>日语</item> <item>葡语</item> <item>俄语</item> </string-array></resources>
(3) MainActivity.java
步骤:
1、获取布局ListView
2、封装显示内容list或数组
3、构建适配器Adapter
4、给ListView添加适配器
package com.example.listview;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;import android.widget.ListView;public class MainActivity extends Activity {private ListView listView2 = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取ListViewlistView2 = (ListView) findViewById(R.id.listView2);//定义数组String arr[] = new String[]{"中国","韩国","日本","美国","葡萄牙","俄罗斯"};//声明适配器 //this 上下文 //android.R.layout.simple_list_item_checked 列表样式 //arr 显示内容 (数组或list集合) ArrayAdapter<String > arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, arr);//listView添加适配器listView2.setAdapter(arrayAdapter);listView2.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {Log.i("listView", parent.getItemAtPosition(position).toString());}});}}
运行效果如下:
如果想要自定义列表,列表项显示多个组件。我们可以用SimpleAdapter来自定义我们的列表。
(1) main_activity.xml
布局了ImageView,TextView 组件,用于显示列表内容
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/linearlayout" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:id="@+id/img" android:layout_width="50dp" android:layout_height="65dp"/> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="100dp" android:layout_marginTop="30dp" /> <TextView android:id="@+id/phone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="30dp" android:layout_marginLeft="150dp" /> </LinearLayout></LinearLayout>
(2)MainActivity.java 步骤与上面的一样
package com.example.listviews;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.widget.ListView;import android.widget.SimpleAdapter;public class MainActivity extends Activity {private ListView listView = null; //定义ListView组件@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取listView组件listView = (ListView) findViewById(R.id.listView);//初始化基础数据String name[] = new String[]{"张三","李四","王五","张飞"};String phone[] = new String[]{"14313426573","15908263541","18012345678","13423456789"};int img [] = new int[]{R.drawable.name01,R.drawable.name02,R.drawable.name03,R.drawable.name04};//封装list集合数据List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();for(int i=0;i<name.length;i++){Map<String,Object> listItem = new HashMap<String, Object>();listItem.put("img", img[i]);listItem.put("name", name[i]);listItem.put("phone", phone[i]);list.add(listItem);}//配置SimpleAdapter适配器//this 上下文//R.layout.activity_main 布局文件//new String[]{"img","name","phone"} 列表内容key//new int[]{R.id.img,R.id.name,R.id.phone} 用于显示内容的布局组件SimpleAdapter simpleAdapter = new SimpleAdapter(this, list, R.layout.activity_main,new String[]{"img","name","phone"}, new int[]{R.id.img,R.id.name,R.id.phone});//添加适配器listView.setAdapter(simpleAdapter);}}
运行效果如下:
除了SimpleAdapter之外,我们还可以重写BaseAdapter的getView方法作为列表的列表项 。 有兴趣的同学可以动手写写BaseAdapter
方式二:Activity继承ListActivity
注意:
ListActivity的默认布局由一个位于屏幕中心的全屏列表构成。如果你不想使用默认的布局,可以在onCreate()方法中通过setContentView()方法设定你自己的布局。如果指定你自己定制的布局,你的布局中必须包含一个id为"@id/android:list"的ListView。 若你还指定了一个id为"@id/android:empty"的view,当ListView中没有数据要显示时,这个view就会被显示,同时ListView会被隐藏
(1)main_activity.xml
布局了一个ListView和TextView,TextView的id为@id/android:empty,当ListView中没有数据要显示时,这个TextView就会被显示
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@+id/android:list" android:layout_width="match_parent" android:layout_height="match_parent"/> <TextView android:id="@android:id/empty" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FF0000" android:text="No data"/> </LinearLayout>
(2) MainActivity.java
package com.example.listactivity;import android.app.ListActivity;import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.ListView;public class MainActivity extends ListActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);String arr[] = new String[]{"中国","韩国","日本","美国","葡萄牙","俄罗斯"};//设置适配器ArrayAdapter<String > arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, arr);//给ListActivity添加适配器setListAdapter(arrayAdapter);}}
如果ListView没有内容,则显示TextView。如下
方式一和方式二的效果完全一样,不同的是,一个给ListView组件添加适配器,一个给ListActivity类添加适配器而已。
- android学习--视图列表(ListView和ListActivity)
- Android列表视图ListView和ListActivity-android学习之旅(二十四)
- 列表视图(ListView)和 ListActivity
- 列表视图ListView和ListActivity
- Android练习-----列表视图(ListView)(通过继承ListActivity实现列表视图)
- 列表视图(ListView)和ListActivity——ArrayAdapter
- Android列表视图(ListView--ArrayAdapter)学习
- Android列表视图(ListView--SimpleAdapter)学习
- Android列表视图(ListView--SimpleCursorAdapter)学习
- Android列表视图(ListView--ArrayAdapter)学习
- Android ListView 列表视图
- Android ListView 列表视图
- Android组件之ListView(列表视图)
- 列表视图(ListView)
- Android UI:ListActivity & ListView
- Android UI: Listview & ListActivity
- android 之 ListActivity & ListView
- ListActivity和ListView
- 剑指offer 3.4 代码的鲁棒性1- 链表中倒数第K个节点
- Android 学习历程摘要(一)
- 使用socket.io和node.js搭建websocket应用
- FileStream 的FileShare一点小认识
- hdu 4862解题报告
- android学习--视图列表(ListView和ListActivity)
- poj1598(字符串处理)
- 【九度OJ】1029【HashMap查找】
- 每天一个Linux命令
- Code Review(一)
- MySQL索引类型总结和使用技巧以及注意事项
- POJ 1062 昂贵的聘礼
- 封装 ASIHTTPRequest 多请求管理类
- LeetCode | Combination Sum(元素的和)