列表视图案例1——阅读古诗
2018-03-06 11:12
330 查看
列表视图案例1——阅读古诗
一、列表视图(ListView)ListView是AdapterView的子类,要通过适配器作为梁桥来绑定数据源。有四种适配器可以使用:数组适配器(ArrayAdapter)、简单适配器(SimpleAdapter)、简单游标适配器(SimpleCursorAdapter)、基适配器(BaseAdapter)。
使用列表控件需要四样东西:列表控件、适配器、数据源、列表项模板
列表视图继承关系图:
二、案例运行效果
二、实现步骤1、创建安卓应用ReadAncientPoetry
2、添加背景图片background.jpg
3、字符串资源文件strings.xml
确实,能够列表显示诗歌标题,但是,我们希望每一行能显示序号以及诗歌作者,利用entries属性绑定数据源的方式就不凑效了,必须使用Java代码来解决。
去掉 android:entries="@array/titles"
5、编写PoemListActivity代码
此时,运行程序,看看效果。
刚才创建数组适配器时,第二个参数是列表项模板,我们采用的是安卓平台提供的布局资源:android.R.layout.simple_list_item_1。这个布局资源文件在哪里可以看到呢?在安卓开发工具包里的platforms\android-25\data\res\layout。
查看该文件内容:
6、创建自定义列表项模板title_list_item.xml
7、修改PoemListActivity
再运行程序,看看效果:
一页没有显示完,可以拖动显示余下的列表项:
8、创建PoemContentAcitivty
9、设计诗歌内容布局文件activity_poem_content.xml
11、修改PoemListActivity代码
12、编写PoemContentActivity代码
单击【返回目录】按钮:
一、列表视图(ListView)ListView是AdapterView的子类,要通过适配器作为梁桥来绑定数据源。有四种适配器可以使用:数组适配器(ArrayAdapter)、简单适配器(SimpleAdapter)、简单游标适配器(SimpleCursorAdapter)、基适配器(BaseAdapter)。
使用列表控件需要四样东西:列表控件、适配器、数据源、列表项模板
列表视图继承关系图:
二、案例运行效果
二、实现步骤1、创建安卓应用ReadAncientPoetry
2、添加背景图片background.jpg
3、字符串资源文件strings.xml
<resources> <string name="app_name">阅读古诗</string> <string-array name="titles"> <item>静夜思</item> <item>登鹳雀楼</item> <item>相思</item> <item>听弹琴</item> <item>登乐游原</item> <item>朝发白帝城</item> <item>巴山夜雨</item> <item>渭城曲</item> <item>春夜喜雨</item> <item>离离原上草</item> <item>示儿</item> </string-array> <string-array name="authors"> <item>唐·李白</item> <item>唐·王之涣</item> <item>唐·王维</item> <item>唐·刘长卿</item> <item>唐·李商隐</item> <item>唐·李白</item> <item>唐·杜牧</item> <item>唐·王维</item> <item>唐·杜甫</item> <item>唐·白居易</item> <item>宋·陆游</item> </string-array> <string-array name="contents"> <item>床前明月光,\n疑是地上霜。\n举头望明月,\n低头思故乡。</item> <item>白日依山尽,\n黄河入海流。\n欲穷千里目,\n更上一层楼。</item> <item>红豆生南国,\n春来发几枝。\n愿君多采撷,\n此物最相思。</item> <item>泠泠七弦上,\n静听松风寒。\n古调虽自爱,\n今人多不弹。</item> <item>向晚意不适,\n驱车登古原。\n夕阳无限好,\n只是近黄昏。</item> <item>朝辞白帝彩云间,\n千里江陵一日还。\n两岸猿声啼不住,\n轻舟已过万重山。</item> <item>君问归期未有期,\n巴山夜雨涨秋池。\n何当共剪西窗烛,\n却话巴山夜雨时。</item> <item>渭城朝雨浥轻尘,\n客舍青青柳色新。\n劝君更尽一杯酒,\n西出阳关无故人。</item> <item>好雨知时节,当春乃发生。\n随风潜入夜,润物细无声。\n野径云俱黑,江船火独明。\n晓看红湿处,花重锦官城。</item> <item>离离原上草,一岁一枯荣。\n野火烧不尽,春风吹又生。\n远芳侵古道,晴翠接荒城。\n又送王孙去,萋萋满别情。</item> <item>死去元知万事空,\n但悲不见九州同。\n王师北定中原日,\n家祭无忘告乃翁。 </item> </string-array> </resources>4、诗歌列表布局文件poem_list_activity.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" tools:context="net.hw.read_ancient_poetry.PoemListActivity"> <ListView android:id="@+id/lv_poem_title" android:layout_width="match_parent" android:divider="#aaaaaa" android:dividerHeight="1dp" android:entries="@array/titles" android:layout_height="match_parent"> </ListView> </LinearLayout>此时,运行程序,看看效果:
确实,能够列表显示诗歌标题,但是,我们希望每一行能显示序号以及诗歌作者,利用entries属性绑定数据源的方式就不凑效了,必须使用Java代码来解决。
去掉 android:entries="@array/titles"
5、编写PoemListActivity代码
package net.hw.read_ancient_poetry; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; /** * Created by howard on 2017/10/6 */ public class PoemListActivity extends Activity { /** * 诗歌总数 */ private static final int POEM_COUNT = 11; /** * 诗歌标题列表控件 */ private ListView lvPoemTitle; /** * 数组适配器(桥梁) */ private ArrayAdapter<String> adapter; /** * 诗歌标题数组(数据源) */ private String[] strPoemTitles; /** * 作者数组 */ private String[] strAuthors; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 利用布局资源文件设置用户界面 setContentView(R.layout.activity_poem_list); // 通过资源标识获得控件实例 lvPoemTitle = (ListView) findViewById(R.id.lv_poem_title); // 初始化诗歌标题数组,作为列表控件的数据源 String[] authors = getResources().getStringArray(R.array.authors); String[] titles = getResources().getStringArray(R.array.titles); strPoemTitles = new String[POEM_COUNT]; for (int i = 0; i < POEM_COUNT; i++) { strPoemTitles[i] = (i + 1) + ". " + authors[i] + "·" + titles[i]; } // 创建数组适配器,作为联系列表控件与数据源的桥梁 adapter = new ArrayAdapter<String>( this, // 参数1:上下文环境 android.R.layout.simple_list_item_1, // 参数2:列表项模板 strPoemTitles // 参数3:数据源(数组或数组列表) ); // 给列表控件设置适配器 lvPoemTitle.setAdapter(adapter); // 给列表控件注册监听器 lvPoemTitle.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 获取用户单击的诗歌标题 String title = strPoemTitles[position]; // 通过吐司显示用户选择的诗歌标题 Toast.makeText(PoemListActivity.this, title, Toast.LENGTH_SHORT).show(); } }); } }
此时,运行程序,看看效果。
刚才创建数组适配器时,第二个参数是列表项模板,我们采用的是安卓平台提供的布局资源:android.R.layout.simple_list_item_1。这个布局资源文件在哪里可以看到呢?在安卓开发工具包里的platforms\android-25\data\res\layout。
查看该文件内容:
6、创建自定义列表项模板title_list_item.xml
7、修改PoemListActivity
再运行程序,看看效果:
一页没有显示完,可以拖动显示余下的列表项:
8、创建PoemContentAcitivty
9、设计诗歌内容布局文件activity_poem_content.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@mipmap/background" android:gravity="center" android:orientation="vertical" > <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="20dp" android:textColor="#ff00ff" android:textSize="30sp" /> <TextView android:id="@+id/tv_author" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="20dp" android:textColor="#000000" android:textSize="18sp" /> <TextView android:id="@+id/tv_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="20dp" android:textColor="#0000ff" android:textSize="20sp" /> <Button android:id="@+id/btn_back" android:layout_width="150dp" android:layout_height="wrap_content" android:onClick="doBack" android:text="@string/back" android:textSize="20sp" /> </LinearLayout>10、修改字符串资源文件strings.xml
11、修改PoemListActivity代码
12、编写PoemContentActivity代码
package net.hw.read_ancient_poetry; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class PoemContentActivity extends Activity { /** * 标题标签 */ private TextView tvTitle; /** * 作者标签 */ private TextView tvAuthor; /** * 内容标签 */ private TextView tvContent; /** * 诗歌标题数组 */ private String[] titles; /** * 诗歌作者数组 */ private String[] authors; /** * 诗歌内容数组 */ private String[] contents; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 利用布局资源文件设置用户界面 setContentView(R.layout.activity_poem_content); // 通过资源标识获得控件实例 tvTitle = (TextView) findViewById(R.id.tv_title); tvAuthor = (TextView) findViewById(R.id.tv_author); tvContent = (TextView) findViewById(R.id.tv_content); // 获得诗歌标题数组 titles = getResources().getStringArray(R.array.titles); // 获取诗歌作者数组 authors = getResources().getStringArray(R.array.authors); // 获取诗歌内容数组 contents = getResources().getStringArray(R.array.contents); // 获取诗歌索引 int poemIndex = getIntent().getIntExtra("poem_index", 0); // 设置标题标签、作者标签与内容标签 tvTitle.setText(titles[poemIndex]); tvAuthor.setText(authors[poemIndex]); tvContent.setText(contents[poemIndex]); } /** * 返回按钮单击事件处理代码 * * @param view */ public void doBack(View view) { finish(); } }运行程序,看看效果:
单击【返回目录】按钮:
相关文章推荐
- 列表视图案例2——显示用户列表
- 列表视图案例3——显示联系人
- 阅读《Android 从入门到精通》(23)——列表视图
- Android练习-----列表视图(ListView)(使用ListView控件创建列表视图)
- JavaScript案例练习二:下拉列表左右选择
- Delphi列表视图组件(TListView)详解
- andoroid实现滑动上下滑动列表的时候动画隐藏其他视图
- 书籍阅读列表
- 无限上拉下拉XlistView 有时候就会出现 适配器内容已经改变,但列表视图没有收到通知。求解,为什么!内有详细说明。
- sphinx 源码阅读之分词,压缩索引,倒排——单词对应的文档ID列表本质和lucene无异 也是外部排序再压缩 解压的时候需要全部扫描doc_ids列表偏移量相加获得最终的文档ID
- Android之如何使用ListView列表视图
- List View(列表视图)
- 键入列表视图时
- js-案例:下拉列表左右选择分析
- docker swarm 英文参考资料阅读列表
- SharePoint 2013无代码实现列表视图的时间段动态筛选
- [李景山php]每天laravel[020]-laravel 中级任务--小白教程----实际操作-创建基础任务 to-do-list 案例 ---视图
- 深度学习阅读列表 Deep Learning Reading List
- 浅谈带有复杂布局列表项的列表视图
- Android创建自定义视图列表对话框(数据库中的数据作为数据源,使用RecyclerView作为列表)