android学习--视图列表(ListView和ListActivity)
说明:
视图列表(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; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取ListView listView2 = (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() { @Override public 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组件 @Override protected 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 { @Override protected 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基于DataBinding封装RecyclerView实现快速列表开发
- android onresume方法,非静态方法’onResume’Android Studio
- android onresume函数,Android界面跳转时候onDestroy和onResume的调用顺序
- Android 开机动画源码分析
- android 常用加密,分享一下Android各种类型的加密
- android 空间分享到朋友圈,Android开发之微信分享到好友,朋友圈
- strictmode android,Android 应用性能优化-StrictMode(严格模式)
- strictmode android,Android中的StrictMode
- android定时器取消,Android定时器崩溃取消
- robotium android,Robotium 测试Android apk安装包
- android短信验证码方案,Android开发之属于你的短信验证码(一)
- 广色域照片闪亮登场 Android: 开发者需知两三事
- Android面试每日一题(3): LaunchMode 的应用场景?
- android线程间通信的几种方法_Android进程间和线程间通信方式
- Android基于EasyPermission封装实现快速权限申请
- android 三级级联筛选列表
- 【Android 安装包优化】WebP 应用 ( Android 中使用 libwebp.so 库编码 WebP 图片 )
- 【错误记录】Android Studio 配置 AspectJ 报错 ( Failed to create Jar file C:xxxaspectjtools-1.8.10.jar. )
- 【Android 逆向】IDA 工具使用 ( 重命名函数 | 添加注释 | 添加标签 / 跳转标签 | 代码跳转前进 / 后退 )
- 【Android Gradle 插件】自定义 Gradle 任务 ① ( Gradle 面板显示任务列表 | 自定义任务生成与显示分组 )
- Android开发中遇到的问题(二)——新建android工程的时候eclipse没有生成MainActivity和layout布局详解手机开发
- Android Studio 导入项目 出现安装Error:Cause: failed to find target with hash string ‘android-23’ 等错误详解手机开发
- Android中的ProgressBar的android:indeterminate详解手机开发
- Android中android:visibility的3中属性的剖析详解手机开发
- Android实现PHP连接MySQL进行数据交互(android通过php连接mysql)
- Android开发笔记之:返回键的复写onBackPressed()介绍
- android实现自动关机的具体方法
- Android实现三级联动下拉框下拉列表spinner的实例代码
- android通过配置文件设置应用安装到SD卡上的方法