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学习--视图列表(ListView和ListActivity)的更多相关文章
- android学习笔记12——ListView、ListActivity
ListView.ListActivity ==> ListView以垂直列表的形式显示所有列表项. 创建ListView的方式: 1.直接使用ListView创建 2.Activity继承Li ...
- Android学习笔记:ListView简单应用--显示文字列表
在activity中的编写如下代码: final List<String> items = new ArrayList<String>(); //设置要显示的数据,这里因为是例 ...
- Android学习笔记之ListView复用机制
PS:满打满算,差不多三个月没写博客了...前一阵忙的不可开交...总算是可以抽出时间研究研究其他事情了... 学习内容: 1.ListView的复用机制 2.ViewHolder的概念 1.List ...
- 列表ListView和ListActivity以及使用SimpleAdapter
创建listview有2种方式 1>直接使用ListView进行创建 2>让Activity继承ListActivity 下面是listview常用的一些属性 案例: public cla ...
- [Android学习笔记]使用ListView
简单使用ListView 关键在于Adatper Adatper用来连接UI与数据源.Adapter既负责提供数据,又负责创建Item视图. 一般步骤: 1.创建list_item.xml,用来创建L ...
- android学习8(ListView高级使用)
ListView在android更开放的,于是继续ListView说明使用. 首先创建一个android项目,项目名为ListViewTest. ListView的简单使用 改动布局文件,改动后代码例 ...
- Android学习——控件ListView的使用
一.ListView的简单用法 首先新建一个ListViewTest项目,并让Android Studio自动创建好活动.然后修改activity_main.xml中的代码,如下: <?xml ...
- Android 自学之列表视图ListView和ListActivity
ListView是手机系统中使用非常广泛的一种组件,它以垂直列表的形式显示所有列表项. 创建ListView有两种方式: 直接使用ListView创建. 让Activity继承ListActivity ...
- Android学习系列(15)--App列表之游标ListView(索引ListView)
游标ListView,提供索引标签,使用户能够快速定位列表项. 也可以叫索引ListView,有的人称也为Tweaked ListView,可能更形象些吧. 一看图啥都懂了: 1. ...
随机推荐
- 宣布与 NBC 合作直播索契冬季奥运
奥运开始的那天早些时候,NBC 和 Microsoft 宣布选择 Windows Azure 媒体服务为 2014 年俄罗斯索契冬奥会提供现场直播.与以往不同,以往的冬奥会采用了有限的流,但本届 ...
- 使用@class和#import的细节问题
在.h头文件中导入其它头文件可以使用#import语句,从而在该头文件下使用另一个文件中的类和成员,但是我在使用#import语句时却遇到了以下问题: 首先写一个ViewController类: #i ...
- http://blog.csdn.net/baimafujinji/article/details/10931621
书接上文,本文章是该系列的第二篇,按照总纲中给出的框架,本节介绍三个中值定理,包括它们的证明及几何意义.这三个中值定理是高等数学中非常基础的部分,如果读者对于高数的内容已经非常了解,大可跳过此部分.当 ...
- Angular JS 学习笔记(一)
1. 菜鸟教程:http://www.runoob.com/angularjs/angularjs-tutorial.html 2. Angular JS中文网:http://www.apjs.net ...
- 通过JavaScript判断当前浏览器版本
从别人处拷贝,只用于自己学习之用.参考源自:http://www.cnblogs.com/leadzen/archive/2008/09/06/1285764.html JavaScript是前端开发 ...
- 通过Manifest的配置信息实现页面跳转,及总结
1:新建一个xml文件,如second_view.xml文件,然后新建一个Activity如SecondActivity.java并在里面设置setContentView(R.layout.secon ...
- 运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库
运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运 ...
- 0课程介绍(Week1,3月3日)
一.自我介绍 1.姓名:杨晔 2.办公室:B211-2 3.电子邮件:yangye@zjjy.com.cn 4.QQ:6706892 5.博客:http://www.cnblogs.com/meety ...
- DataReader的例子
前: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DataReader对 ...
- 1298 The Hardest Problem Ever
题目链接:http://poj.org/problem?id=1298 思路分析:水题,字符偏移求解,注意字符串输入问题即可. 代码如下: #include <iostream> #inc ...