Android移动应用开发教程(微课版) 课件 单元三 新闻App_第1页
Android移动应用开发教程(微课版) 课件 单元三 新闻App_第2页
Android移动应用开发教程(微课版) 课件 单元三 新闻App_第3页
Android移动应用开发教程(微课版) 课件 单元三 新闻App_第4页
Android移动应用开发教程(微课版) 课件 单元三 新闻App_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单元三

新闻App学习导读

今日头条、百度新闻、微信等页面都是通过列表视图设计实现的,列表视图在App应用中十分重要,也承载着不同场景数据显示应用。本单元通过介绍仿百度新闻App的设计过程,帮助读者了解Activity、Intent等组件基本知识,掌握ListView、RecyclerView、WebView组件和适配器的联合应用方法,学会利用SimpleAdapter、BaseAdapter和现在推荐RecyclerView实现新闻App。学习目标知识目标:1.了解Activity、Intent、ListView、WebView、RecyclerView等基本组件;2.理解SimpleAdapter的构造方法;3.掌握BaseAdapter中的抽象方法;4.掌握ItemClick事件的用法。技能目标:1.能够利用ListView组件搭载SimpleAdapter或BaseAdapter实现显示列表视图;2.能够利用RecyclerView、适配器以及ViewHolder实现显示列表视图;3.能够利用Intent组件实现页面跳转;4.能够利用WebView组件加载网页。素养目标:1.培养学生的发散性思维和想象力,实现能力拓展;2.培养学生发现问题、解决问题的能力,以及思考的能力。思维导图3.1ActivityActivity是Android程序的四大组件之一。Activity是Android程序的表示层,其代表了一个具有UI的单一屏幕,一般可以认为程序的每一个显示屏幕就是由一个Activity表示的。Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView()方法来指定要显示的页面。在AndroidStudio中创建一个Activity,默认继承的是AppCompatActivity类,当然也可以继承Activity类,只不过AppCompatActivity类比Activity类能够提供更多新的功能。3.1Activity3.1.1手动Activity创建classMyActivityextendsActivity{publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);

setContentView(R.layout.main);//设置Activity加载的页面视图}}3.1Activity3.1.12AndroidStudio中创建Activity3.1Activity3.1.2AndroidStudio中创建Activity3.1Activity3.1.3手动Activity注册在工程manifests文件夹中打开AndroidManifest.xml文件,找到application标签,在其中添加activity标签对Activity进行注册,没有注册的Activity不能使用。<application>

<activity

android:name=".MyActivity"/></application>3.1Activity3.1.4AppCompatActivity和Activity的区别AppCompatActivity类在androidx.appcompat.app包下,Activity类在android.app包下。AppCompatActivity类间接继承Activity类,是Activity的升级版。它们之间的直观区别是继承AppCompatActivity的类带标题栏,而继承Activity的类不带标题栏。3.1Activity3.1.5去掉标题栏

1.代码方式(1)隐藏标题栏隐藏标题栏具体实现代码如下:getSupportActionBar().hide();setContentView(R.layout.activity_main);(2)去掉标题栏去掉标题栏具体实现代码如下:supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_main);3.1Activity3.1.5去掉标题栏

2.样式方式

在style.xml文件中修改样式,修改继承父类,把parent属性设置为Theme.MaterialComponents.DayNight.NoActionBar,表示此风格没有标题栏3.1Activity3.1.6Activity生命周期

在Activity的生命周期中有运行状态、暂停状态、停止状态、销毁状态4种基本状态。3.1Activity3.1.6Activity生命周期Activity类中定义了7个回调方法,涵盖了Activity生命周期的每一个环节。onCreate():在Activity第一次创建时调用。在这个方法中完成Activity的初始化操作,如加载布局、初始化布局组件、绑定事件等。onStart():在Activity可见但是没有焦点时调用。onResume():在Activity可见并且有焦点时调用。onPause():在准备启动或恢复另一个Activity时调用,通常在该方法中需要释放占用CPU的资源或者保存数据,但在该方法内不能做耗时操作,否则会影响另一个Activity的启动或恢复。onStop():在Activity不可见时调用,它和onPause()的主要区别就是,onPause()在Activity失去焦点时调用但是依然可见,而onStop()是完全不可见。onDestory():在Activity被销毁前调用。onRestart():在Activity由不处于栈顶到再次回到栈顶并且可见时调用。3.1Activity3.1.6Activity生命周期3.2IntentIntent是Android系统四大组件之一,中文含义为“意图,意向”。Android系统中Intent组件用来协助应用之间的交互与通信。Intent负责对应用中一次操作的动作、动作及其涉及的数据、附加数据进行描述,Android则负责根据Intent的描述,找到对应的组件,将该Intent传递给调用的组件,并完成组件的调用。Intent作用如下。1.启动Activity通过Context.startActivity()、Activity.startActivityForResult()启动一个Activity。2.启动Service(服务)

通过Context.startService()启动一个Service,或者通过Context.bindService()和后台Service交互。3.发送Broadcast(广播)

通过广播方法Context.sendBroadcasts()、Context.sendOrderedBroadcast()、Context.sendStickyBroadcast()将广播发送给BroadcastReceiver(广播接收者)。3.2Intent3.2.1Intent包含信息与构造Intent作为一个负责本组件间传递消息的信息对象,最重要的就是其包含的信息。实际上无论是显式还是隐式Intent发出的时候,系统对应的行为都是由Intent所包含信息的组合决定的。Intent的各部分信息均为可选值,但是在使用Intent的时候,会根据Intent设定的信息组合来决定对应行为。3.2Intent3.2.2Intent用法1.拨打电话

打开拨号盘具体实现代码如下:(1)打开拨号盘

Uriuri=Uri.parse("tel:10010");

Intentintent=newIntent(Intent.ACTION_DIAL,uri);

this.startActivity(intent);(2)直接打电话

直接拨打电话具体实现代码如下:

Uriuri=Uri.parse("tel:10010");

Intentintent=newIntent(Intent.ACTION_CALL,uri);

this.startActivity(intent);

在AndroidManifest.xml中,加上<uses-permissionandroid:name="android.permission.CALL_PHONE"/>3.2Intent3.2.2Intent用法2.发送短信发送短信具体实现代码如下:Uriuri=Uri.parse("smsto:/10010");Intentintent=newIntent(Intent.ACTION_SENDTO,uri);it.putExtra("sms_body","新年快乐,万事如意!!!");this.startActivity(intent);3.浏览网页浏览网页具体实现代码如下:Uriuri=Uri.parse("");Intentintent=newIntent(Intent.ACTION_VIEW,uri);this.startActivity(intent);在AndroidManifest.xml中,加上<uses-permissionandroid:name="android.permission.INTERNET"/>,用于设置实现直接访问网络的权限3.2Intent3.2.2Intent用法4.拍照拍照具体实现代码如下://打开拍照程序Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(intent,1);3.2Intent3.2.3利用Intent启动Activity1.启动一个ActivityIntentintent=newIntent(Activity1.this,Activity2.class);startActivity(intent);3.2Intent3.2.3利用Intent启动Activity2.启动一个Activity并传递数据3.2Intent3.2.3利用Intent启动Activity3.向前一个Activity返回数据3.3ListViewListView表示列表视图,是以垂直方式显示其内部列表项的视图组件。列表视图中的列表项可以是一串文字,也可以是用户自定义的包含文字和图片的组合项,一般与ArrayAdapter、SimpleAdapter等适配器一起使用。1.布局文件设计布局文件具体实现代码如下:<ListView

android:layout_width="match_parent"android:layout_height="match_parent"/>2.常用属性android:divider="@drawable/list_driver"表示设置一个图片作为列表项之间的分割线。android:divider="@null"表示设置不显示列表项之间的分割线。android:divider="#00000000"表示设置列表项之间无间隙。android:scrollbars="none"表示设置隐藏列表视图的滚动条。android:fadeScrollbars="true"表示设置列表视图的滚动条可以自动隐藏或显示。3.3ListView3.事件监听器setOnItemClickListener(AdapterView.OnItemClickListenerlistener);OnItemClickListener用于捕获ListView组件产生的ItemClick事件,当列表项被选中或者被单击时触发该事件。重写onItemClick(AdapterView<?>parent,Viewview,intposition,longid)方法参数parent表示发生单击动作的AdapterView参数view表示在AdapterView中被单击的列表项视图参数position表示列表项视图在适配器中的位置参数id表示被单击列表项的行号3.4适配器适配器是Android中一项十分重要的技术,ListView、Spinner、ViewPager等组件在使用的过程中都会用到适配器,简单来说就是把数据适配到组件上。首先把数据集合中每组数据映射到指定布局文件上生成视图,形成视图集合,之后通过适配器把视图集合传递给ListView、Spinner等组件进行显示。布局文件1(视图模板)适配器视图集合组件ListViewSprinner布局文件N(视图模板)…数据数据数据数据………………映射映射映射映射生成视图生成视图数据集合数据集合3.4适配器3.4.1ArrayAdapterArrayAdapter是一个简单、易用的数组适配器,数据源可以是数组或者集合,主要用于每行只显示文本信息的列表视图中。3.4.2SimpleAdapterSimpleAdapter是一个简单的适配器,也把由Map集合组成的List集合中的数据映射到指定的列表项布局文件中的组件上。List集合中的每一条数据对应列表视图中每一个列表项的内容数据。该适配器主要用于显示文字和图片等复杂信息列表。3.4适配器3.4.2SimpleAdapterpublicSimpleAdapter(Contextcontext,List<?ExtendsMap<String,?>>data,intlayout,String[]from,int[]to)。3.4适配器3.4.3SimpleCursorAdapter与SimpleAdapter基本相似,SimpleCursorAdapter只是将List对象换成了Cursor对象,Cursor对象是访问数据库返回的结果集。publicSimpleCursorAdapter(Contextcontext,intlayout,Cursorc,String[]from,int[]to)。3.4.4BaseAdapterBaseAdapter是一个公共基类适配器。需要重写getCount()、getItem()、getItemId()、getView()等方法。getView()方法是实现定制列表项的重要方法。getCount()方法用于获取列表项的数量;getItem()方法用于获取指定位置列表项的数据内容;getItemId()方法用于获取指定位置列表项的ID值;getView()方法用于获取指定位置列表项的视图,简单理解就是把指定位置的数据映射到列表项的对应布局文件中形成视图,最终实现该视图在列表视图中显示。3.5WebView组件WebView是Android系统中的原生组件,其主要功能是与前端页面进行响应、交互,方便、快捷省时地实现预期功能,相当于增强版的内置浏览器。WebView组件加载网页及页面内容的方法如下。1.加载一个网页webView.loadUrl("/");2.加载APK包中的HTML页面webView.loadUrl("file:///android_asset/test.html");3.加载手机本地的HTML页面webView.loadUrl("content://com.android.htmlfileprovider/sdcard/test.html");4.加载HTML页面的一小段内容Stringstr="<html><body>你的成绩<b>92</b>分。</body></html>";webView.loadData(str,"text/html",null)3.6SimpleAdapter版新闻App本案例主要模仿百度新闻APP,通过列表视图显示新闻导航页面,单击列表项进入新闻显示页面,利用WebView组件实现页面显示。用到的组件ListView和SimpleAdapter实现列表显示。Intent组件负责传递参数和启动Activity,WebView组件负责显示网页3.6SimpleAdapter版新闻App实现步骤:1.布局文件设计2.数据封装3.定义适配器4.页面跳转实现5.新闻显示页面实现

3.6SimpleAdapter版新闻App3.6.1页面布局文件设计

1.主页面布局文件设计放置ListView组件

2.新闻列表项布局文件设计

3.新闻显示页面布局文件设计放置WebView组件3.6SimpleAdapter版新闻App3.6.2数据封装要求把每一行的数据封装到Map集合中,再将Map集合添加到List集合中;把每一类的数据分别存储到数组中,通过循环结构把数据封装到Map集合中,之后再添加到List集合中1.定义数据数组2.封装数据Listlist=newArrayList();for(inti=0;i<imgs.length;i++){

Mapmap=newHashMap();map.put("img",imgs[i]);map.put("title",titles[i]);map.put("time",times[i]);map.put("add",adds[i]);list.add(map);}}3.6SimpleAdapter版新闻App3.6.3定义适配器ListViewlv=(ListView)this.findViewById(R.id.lv);SimpleAdapteradapter=newSimpleAdapter( this,//上下文 list,//数据集合R.layout.list_item1,//列表项的布局文件 newString[]{"img","title","add","time"},//Map集合中的键名的集合 //list_item1布局文件组件id的集合 newint[]{R.id.img,R.id.title,R.id.add,R.id.time});//设置ListView组件所关联的适配器lv.setAdapter(adapter);3.6SimpleAdapter版新闻App3.6.4页面跳转实现lv.setOnItemClickListener(newAdapterView.OnItemClickListener(){@OverridepublicvoidonItemClick(AdapterView<?>adapterView,Viewview,inti,longl){Intentintent=newIntent(MainActivity.this,WebActivity.class);//传递URLintent.putExtra("url",urls[i]);startActivity(intent);}});3.6SimpleAdapter版新闻App3.6.5新闻显示页面实现publicclassWebActivityextendsAppCompatActivity{privateWebViewwebView;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_web); webView=(WebView)findViewById(R.id.web); Intentintent=this.getIntent(); Stringurl=intent.getStringExtra("url"); webView.loadUrl(url);}}3.6SimpleAdapter版新闻App3.6.5新闻显示页面实现AndroidManifest.xml文件中添加用户访问网络权限<uses-permissionandroid:name="android.permission.INTERNET"/>3.7BaseAdapter版新闻App本案例在上个案例基础上进行扩展,列表项有两种,一种是显示一张图片的列表项,另一种是显示3张图片的列表项。利用SimpleAdapter只能实现一种形式的列表项显示,不能实现多种形式的显示,因此Android提供了BaseAdapter自定义适配器,可以根据业务需求扩展适配器的功能。3.7BaseAdapter版新闻App实现步骤:1.新闻列表页面制作2.数据的定义与封装3.自定义适配器4.自定义适配器使用3.7BaseAdapter版新闻App3.7.1新闻列表项页面制作3张图片新闻列表项页面制作思路,利用LinearLayout布局嵌套实现,先垂直排列,在水平排列。3.7BaseAdapter版新闻App3.7.2数据封装int[][]imgs={ {R.drawable.p11,R.drawable.p12,R.drawable.p13}, {R.drawable.p21,R.drawable.p22,R.drawable.p23}, {R.drawable.p31}, {R.drawable.p41,R.drawable.p42,R.drawable.p43}, {R.drawable.p51}};3.7BaseAdapter版新闻App3.7.2数据封装int[][]imgs={ {R.drawable.p11,R.drawable.p12,R.drawable.p13}, {R.drawable.p21,R.drawable.p22,R.drawable.p23}, {R.drawable.p31}, {R.drawable.p41,R.drawable.p42,R.drawable.p43}, {R.drawable.p51}};此二维数组中每一行一维数组的数据代表列表视图中列表项要显示的图片。把一行的数据封装到集合中,代码没有发生改变。3.7BaseAdapter版新闻App3.7.4自定义适配器定义MyAdapter类继承BaseAdapter类,重写getCount()、getItem(inti)、getItemId(inti)、getView(inti,Viewview,ViewGroupviewGroup)方法,其核心方法是getView()方法。getView()方法的主要功能是把第i行的数据,按照预先设计的格式映射到新闻列表项布局文件视图中。本案例通过读取第i行数据获得图片的张数,如果图片的张数是1,则把数据映射到list_item1.xml文件中对应的组件上生成视图,如果图片的张数是3,则把数据映射到list_item3.xml文件中对应的组件上生成视图。3.7BaseAdapter版新闻App3.7.5自定义适配器使用//定义适配器MyAdapteradapter=newMyAdapter(this,list);//ListView对象设置为此适配器lv.setAdapter(adapter)3.8RecyclerView版新闻App从Android5.0开始,谷歌公司推出一个用于展示大量数据的新组件RecyclerView,RecyclerView组件可以用来代替传统的ListView组件,功能更加强大和灵活。目前Android官方推荐使用RecyclerView组件显示列表。3.8RecyclerView版新闻App3.8.1RecyclerView组件优势1.RecyclerView组件封装ViewHolder实现回收和复用2.高度解耦3.列表项动画控制3.8RecyclerView版新闻App3.8.2RecyclerView组件配套类1.布局管理器LinearLayoutManager:表示以垂直或者水平列表方式展示列表项GridLayoutManager:表示以网格方式展示列表项StaggeredGridLayoutManager:表示

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论