android 数据适配器一个适配器可以加载两个node类么?

熟悉Android的朋友们都知道,不管是微博客户端还是新闻客户端,都离不开列表组件,可以说列表组件是Android数据展现方面最重要的组件,我们今天就要讲一讲列表组件ListView加载数据的相关内容。通常来说,一个应用在展现大量数据时,不会将全部的可用数据都呈现给用户,因为这不管对于服务端还是客户端来说都是不小的压力,因此,很多应用都是采用分批次加载的形式来获取用户所需的数据。比如:微博客户端可能会在用户滑动至列表底端时自动加载下一页数据,也可能在底部放置一个“加载更多”按钮,用户点击后,加载下一页数据。
我们今天就结合实例来演示一下使用ListView获取数据的过程。
新建一个loadmore项目,我们来看一下结构图和最终效果图:
左图中包含了三个布局文件、一个Adapter和一个Activity,右图是我们运行后的主界面。
其中,main.xml是主界面的布局文件,它包含一个ListView组件,代码如下:
这里我们引用了Android内置的名为list的id,因为我们后面要使用到ListActivity,我们的MainActivity继承于它。
然后就是list_item.xml,它是ListView中单个列表项的布局文件,从效果图中可以看到,这里只使用到了一个TextView组件,list_item.xml代码如下:
我们注意到在右图中列表底部有一个按钮不同于其他的列表项,这是什么情况?事实上这个按钮是我们在ListView底部添加的一个视图。ListView组件提供了两个很实用的功能,那就是可以在顶部和底部添加自定义的视图。我们在此处ListView的底部添加了一个视图用来加载更多数据,这个视图对应着load_more.xml布局文件,代码如下:
接下来我们来了解一下我们的Adapter,ListViewAdapter代码如下:
这个ListViewAdapter是我们自定义适配器,它继承自BaseAdapter,实例化此适配器需要一个Context对象来获取LayoutInflater实例和一个集合对象来充当适配器的数据集;在getView方法中我们填充list_item.xml布局文件,完成列表每一项的数据显示;addItem方法用来在加载数据时向数据集中添加新数据。
最后我们来看一下MainActivity:
如代码所示,我们在onCreate方法被调用时获取listView组件,设置其底部视图为loadMoreView,它包含一个按钮,点击时会触发loadMore方法调用,另外在为listView设置完适配器时,又为其设置了滑动事件监听器,滑动列表时onScroll会被调用,滑动状态改变时onScrollStateChanged会被调用。
我们来演示一下这个加载过程:
如图,当点击完按钮后,出现加载动作,加载完之后如右图所示,新数据紧接在原数据之后。然后我们滑动到底部,加载按钮仍可工作:
最后,我们测试一下滑动列表到底部,然后松开,控制台打印如下:
我们看到onScrollStateChanged方法里的if语句里代码执行了,所以如果我们希望自动加载的话,可以把加载代码放于此处。
今天先讲到这里,谢谢大家。
来源:http://blog.csdn.net/liuhe688/article/details/6852523
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:289543次
积分:3713
积分:3713
排名:第2765名
原创:31篇
转载:288篇
评论:89条
(1)(2)(1)(1)(9)(12)(5)(6)(6)(15)(12)(1)(8)(10)(9)(16)(24)(4)(1)(7)(23)(5)(12)(1)(2)(3)(2)(1)(1)(3)(3)(1)(1)(3)(4)(9)(2)(4)(2)(2)(7)(2)(3)(2)(11)(4)(11)(11)(9)(25)1.对NDK的理解?
NDK是一系列工具的集合。
* NDK(Native Develop Kit)提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。,并提供了相应的mk文件隔离平台、CPU、API等差异,开发人员只需要简单修改mk文件(指出”哪些文件需要编译”、”编译特性要求”等),就可以创建出so。
* NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。
2.对JNI的理解?
可以用JNI(Java Native Interface)接口。
标准的类库可能不支持你的程序所需的特性。或许你已经有了一个用其他语言写成的库或程序,而你希望在程序中使用它。
你可能需要用底层语言实现一个小型的时间敏感代码,比如汇编,然后在你的程序中调用这些功能。
publicclassHelloWorld {
publicnativevoiddisplayHelloWorld();//所有native关键词修饰的都是对本地的声明
System.loadLibrary(“hello”); //载入本地库
publicstaticvoidmain(String[] args) {
newHelloWorld().displayHelloWorld();
3.继承SQLiteOpenHelper实现?
Class MyDBHelper extends SQLiteOpenHelper{
String sql=”create table TempTbl(_id integer,name text)”;
public void onCreate(SQLiteDatabase db){
db.execSQL(sql);
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
4.代码创建AVD?
名字myAvd,sdk版本2.2,sd卡根目录在d盘,名字为scard.img,屏幕大小HVGA
android create avd–n myAvd –t 8 –s HVGA –c d:\card.img
5.View, surfaceView, GLSurfaceView有什么区别。
view是最基础的,必须在UI主线程内更新画面,速度较慢。
SurfaceView是view的子类,类似使用双缓机制,在新的线程中更新画面所以刷新界面速度比view快。
GLSurfaceView是SurfaceView的子类,opengl 专用的。
6.请写一段代码(SAX, DOM, 或者pull )来解析XML文档。
下面是要解析的XML文件:
person.xml:
&?xml version=&#″ encoding=”UTF-8″?&&persons&&person id=+&&name&张三&/name&&age&22&/age&&/person&&person id=+&&name&李四&/name&&age&23&/age&&/person&&/persons&
定义一个名为Person的javaBean用于存放上面解析出来的xml内容
publicclass Person {private Iprivate Sprivate Spublic Integer getId() {return}publicvoid setId(Integer id) {this.id =}public String getName() {return}publicvoid setName(String name) {this.name =}public Short getAge() {return}publicvoid setAge(Short age) {this.age =}}
DOM解析XML文件时,会将XML文件的所有内容读取到内存中,然后允许您使用DOM API遍历XML树、检索所需的数据。
DOMPerson.java
import java.io.InputSimport java.util.ArrayLimport java.util.Limport javax.xml.parsers.DocumentBimport javax.xml.parsers.DocumentBuilderFimport org.w3c.dom.Dimport org.w3c.dom.Eimport org.w3c.dom.Nimport org.w3c.dom.NodeLimport com.sinber.domain.P
publicclass DOMPerson {publicstatic List&Person& getPerson() throws Exception{List&Person& pers =new ArrayList&Person&();InputStream inStream = SAXPersonService.class.getClassLoader().getResourceAsStream(“person.xml”);DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document dom = builder.parse(inStream);Element root = dom.getDocumentElement();NodeList persons =root.getElementsByTagName(“person”);for(int i=0;i&persons.getLength();i++){Element personNode =(Element)persons.item(i);Person person =new Person();person.setId(new Integer(personNode.getAttribute(“id”)));NodeList childNodes = personNode.getChildNodes();for(int j=0;j&childNodes.getLength();j++){Node childNode = childNodes.item(j);if(childNode.getNodeType()==Node.ELEMENT_NODE){Element element = (Element)childNif(“name”.equals(childNode.getNodeName())){person.setName(new String(element.getFirstChild().getNodeValue()));}elseif(“age”.equals(childNode.getNodeName())){person.setAge(new Short(element.getFirstChild().getNodeValue()));}}}pers.add(person);}inStream.close();return}}
7.已知单链表的头结构head,写一个函数把这个链表逆序。
publicclass Node {private Iprivate Node nextNpublic Node(){}public Node(int count){this.count =new Integer(count);}public Integer getCount() {return}publicvoid setCount(Integer count) {this.count =}public Node getNextNode() {return nextN}publicvoid setNextNode(Node nextNode) {this.nextNode = nextN}}
ReverseSingleLink.java
publicclass ReverseSingleLink {publicstatic Node revSingleLink(Node head){if(head ==null){ //链表为空不能逆序return}if(head.getNextNode()==null){ //如果只有一个结点,当然逆过来也是同一个return}Node rhead = revSingleLink(head.getNextNode());head.getNextNode().setNextNode(head);head.setNextNode(null);return }publicstaticvoid main(String[] args){Node head =new Node(0);Node temp1 =null,temp2 =null;for(int i=1;i&100;i++){temp1 =new Node(i);if(i==1){head.setNextNode(temp1);}else{temp2.setNextNode(temp1);}temp2 = temp1;} head = revSingleLink(head);while(head!=null){head = head.getNextNode();}}}
8.10个常用linux命令和常用Android相关命令?
1.cd目录名
2.vi 文件名
3.rm [选项] 文件列表
4.cat[选项]文件列表(如:cat userinfo.xml)
5.cp[选项] 源文件目标文件6.find目录列表匹配标准
7.grep [选项] 正则表达式文件列表
8.ls [选项] [文件列表](如:ls)
9.more [选项] 文件名
10.who [选项] utmp式的文件
android create avd –n &name& -t &targetID&
android list target
adb push d:\test.txt
/sdcard/test.txt
adb install
sqlite3 studDB.db
cat userinfo.xml
9.Socket实现客户端-服务器通信?
服务器端:
ServerSocket server=new ServerSocket(8888);
While(true){
Socketclient=server.accept();//侦听并接受到此套接字的连接
OutputStream out=client.getOutputStream();//返回此套接字的输出流
String msg=”Hello”;
out.write(msg.getBytes());
client.close();
Socket socket=new Socket(&#.1.101&#);
InputStream in=socket.getInputStream();
byte[] buffer=new byte[in.avaiable()];
in.read(buffer);
String msg=new String(buffer);
10.定义一个ProgressBar用线程完成下载?
&ProgressBar
android:id=”@+id/bar”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:max=+
android:style=”@android:style/Widget.ProgressBar.Horizontal”
bar=(ProgressBar)findViewById(R.id.bar);
Handler handler=new Handler(){
public void handleMessage(Message msg){
If(msg.what==0×111){
bar.setProgress(status);
new Thread(){
public void run(){
while(status&100){
status+=5;
Thread.sleep(100);
Message m=new Message();
m.what=0×111;
handler.sendMessage(m);
也可Timer timer=new Timer();
timer.schedule(new TimerTask(){runnable}, long delay, long period)
也可handler.postDelayed(runnable, long delayMillis);
11.dp和 px转换关系?
px = dp*(dpi/160)
QVGA: density=0.75 densityDpi=120 QVGA(240*320) (Quarter:1/4)
HVGA:density=1.0 densityDpi=160 HVGA(320*480) (Half:1/2)
VGA:density=1.0 densityDpi=160 VGA(480*640)
WVGA:density = 1.5 densityDpi=240 WVGA(480*800) (Wide)
WQVGA:density=2.0 densityDpi=120 WQVGA(240*400)(Wide Quarter)
dip值表示每英寸有多少个显示点(像素密度)。当densityDip=160时,1dp=1px。
12.Android SDK 下的常用工具有哪些?
platform-tools目录下常用的工具有:
aapt、adb、dx、aidl
tools目录下常用的工具有:
android、apkbuilder、ddms、draw9patch、emulator、mksdcard、sqlite3
13. Android线程涉及的技术有哪些?它们间的关系怎样。
Message、Handler、MessageQueue、Looper。
Message:就是Handler接收和处理的消息。
Looper:每个线程只能拥有一个Looper。它的loop方法负责读取MessageQueue中的消息,读到信息之后就把消息交给发送该消息的Handler进行处理。
MessageQueue:消息队列,它采用先进先出的方式来管理Message。程序创建Looper对象时会在它的构造器中创建Looper对象。Looper提供的构造器代码如下:
private Looper() {
mQueue = new MessageQueue();
mThread = Thread.currentThread();
从上面代码不难看出程序在初始化Looper时会创建一个与之关联的MessageQueue,这个MessageQueue就负责管理消息。
Handler:它的作用有两个:发送消息,程序使用Handler发送消息,被Handler发送的消息必须被送到指定的MessageQueue。也就是说,如果希望Handler正常工作,必须在当前线程中有一个MessageQueue,否则消息就没有MessageQueue进行保存了。不过MessageQueue是由Looper负责管理的,也就是说,如果希望Handler正常工作,必须在当前线程中有一个Looper对象。为了保证当前线程中有Looper对象,可以分两种情况处理:
-程序UI线程中,系统已经初始化了一个Looper对象,因此程序直接创建Handler即可,然后就可通过Handler来发送消息、处理消息。
-程序员自己启动的子线程,程序员必须自己创建一个Looper对象,并启动它。创建Looper对象调用它的prepare()方法即可。prepare方法保证每个线程最多只有一个Looper对象,prepare方法的源代码如下:
public static final void prepare() {
if (sThreadLocal.get() != null) {
throw new RuntimeException(“Only one Looper may be created per thread”);
sThreadLocal.set(new Looper());
然后调用Looper的静态loop()方法来启动它,loop方法就是使用一个死循环不断都取出MessageQueue中的消息,并将取出的消息分给该消息对应的Handler进行处理。
归纳起来:
Looper:每个线程只有一个,它负责管理MessageQueue,它会负责不断的从MessageQueue中取出消息,并将消息分给对应的Handler处理。
MessageQueue:由Looper负责管理。它采用先进先出的方式来管理所有Message。
Handler:它能把消息发送给Looper管理的MessageQueue,并负责处理Looper分给它的消息。
14. TCP/IP协议
这部分简要介绍一下TCP/IP的内部结构,为讨论与互联网有关的安全问题打下基础。组之所以流行,部分原因是因为它可以用在各种各样的和底层协议之上。确切地说,是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组。TCP/IP整体构架概述:
并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:、、网路层、、话路层、和。而TCP/IP采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为::应用程序间沟通的层,如简单电子邮件传输(SMTP)、(FTP)、网络远程访问协议(Telnet)等。:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。互连:负责提供基本的数据传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。层:对实际的的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。TCP/IP中的协议以下简单介绍TCP/IP中的协议都具备什么样的功能,都是如何工作的:
1. IP 网际协议IP是TCP/IP的心脏,也是中最重要的协议。
IP层接收由更低层(层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层—TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。IP确认包含一个选项,叫作IP source routing,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说,使用了该选项的IP包好象是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依靠IP源地址做确认的服务将产生问题并且会被。
2. TCP 如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向’上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。
TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。面向连接的服务(例如Telnet、FTP、rlogin、s和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。
15. AIDL简单描述
AIDL全称Android Interface Definition Language(Android接口描述语言)是一种借口描述语言; 编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程跨界对象访问的目的。它使用代理类在客户端和实现层间传递值。
16.产生死锁的条件
?1、相互排斥:一个线程或者进程永远占有共享资源,例如,独占该资源。
?2、循环等待:进程A等待进程B,而后者又在等待进程C,而进程C又在等待进程A。
?3、部分分配:资源被部分分配,例如,进程A和B都需要访问一个文件,并且都要
用到打印机,进程A获得了文件资源,进程B获得了打印机资源,但是两个进程
不能获得全部的资源。
?4、缺少优先权:一个进程访问了某个资源,但是一直不释放该资源,即使该进程处于
阻塞状态。
17.如何适配不同分辨率、不同语言环境
drawable-hdpi/ldpi/mdpi/xhdpi/xxhdpi/640×360(图片分辨率适配)
values-sw600dp/v11/640×360(dimen.xml适配尺寸下的资源)
注:-sw[N]dp:要求N小于你的屏幕高度或宽度二者中的最小值。
layout-land/port/hdpi/large/640×360(横竖屏、布局文件分辨率适配)
语言环境:
values-en-rUS/-zh-rCN
18.Android系统架构及简介
Android 是由5部分组成,分别是:Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。
19.横竖屏切换时候activity的生命周期?
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges=”orientation|keyboardHidden“时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
20.Service的生命周期
21.DDMS的作用
DDMS 的全称是Dalvik Debug Monitor Service,是 Android 开发环境中的Dalvik虚拟机调试监控服务。它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等等。
22.继承ContentProvider类要重写的方法有哪些
public boolean onCreate();
public Uri insert(Uri uri, ContentValues initialValues);
public int delete(Uri uri, String selection, String[] selectionArgs);
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs);
/*参数values:更新的数据*/
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) ;
/*参数说明:
uri:表名,如:Contacts.People.CONTENT_URI
projection:列名,如:{Contacts.PeopleColumns.NAME,Contacts.PeopleColumns.NOTES}。
selection:条件,如:Contacts.PeopleColumns.NAME + ” = ? ”
selectionArgs:条件参数,如:{“akuan”}
sortOrder:排序方式,如:Contacts.PeopleColumns.NAME
public String getType(Uri uri)
如:private void insert(){
ContentResolver cr=getContentResolver();
ContentValues values=new ContentValues();
Uri uri=Contacts.People.CONTENT_URI;
values.put(People.NAME,”tom”);
values.put(People.NOTES,”I’m tom!”);
cr.insert(uri,values);
表:Contacts.People.CONTENT_URI
People.NAME
People.NOTES
……
Information tech
……
I’m tom!
……
……
……
……
一旦某个应用程序提供了ContentProvider,其他程序就可通过ContentResolver来访问ContentProvider所暴露的数据。归纳起来说:ContentResolver负责向指定Uri执行C、R、U、D操作,而实际上这些操作将会由系统委托给该Uri对应的ContentProvider来去执行,ContentProvider执行完成后会把结果返回给ContentResolver。
&provider android:name=”PersonContentProvider”
android:authorities=”com.xxxx.xxxx”/&
23. Adapter有什么作用?常见的Adapter有哪些?
Adapter是连接后端数据和前端显示的适配器接口。
常见的Adapter子接口包括ListAdapter和SpinnerAdapter。其中ListAdapter接口主要为ListView、GridView这种AdapterView提供数据和显示组件。而SpinnerAdapter主要为Spinner、Gallery这种AdapterView提供数据和显示组件。
ListAdapter、SpinnerAdapter它们有如下实现类:
ArrayAdapter:用法比较简单。功能也比较简单,只要传入数组或List集合作为列表组件的数据即可。
SimpleAdapter:用法略显复杂,但功能比较强大。程序需要传入一个List集合(List集合元素为Map)作为列表组件的数据。
SimpleCursorAdapter:功能和用法与SimpleAdapter十分相似。只是程序使用Cursor作为列表组件的数据。
BaseAdapter:这个Adapter主要供用户继承,然后需要重写它提供的getCount()、getItem()、getItemId、getView等方法。
如:String[] strs={“java”,”C”,”C++”,”VB”};
ArrayAdapter&String& adapter
=new ArrayAdapter&String&(this,android.R.layout.simple_list_item_1,strs);
listView.setAdapter(adapter);
Cursor cursor
=getContentResolver().query(People.CONTENT_URI,null,null,null,null);
ListAdapter adapter=new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1,
new String[]{People.NAME},
new int[]{android.R.id.text1});
24.判断手机是否有SD卡
Environment.getExternalStorageState.equals(Environment.MEDIA_MOUNTED))
)//装入有SD卡
{… …}
25.Android工程中的目录结构
assets:用于存放需要打包到应用程序的静态文件,以便部署到设备中。与res/raw不同点在于,assets支持任意深度的子目录。这些文件不会生成任何资源ID,必须使用/assets开始(不包含它)的相对路径名。
res/raw:存放通用的文件,该文件夹内的文件将不会被编译成二进制文件,按原样复制到设备上。
bin/res:编译后只有原来的图片drawable-hdpi/ldpi/mdp目录。
classes.dex:.class文件编译后打包成.dex文件
First.apk:全局生成的apk应用
resources.ap_:资源打包文件,如layout、values目录下的资源
proguard.cfg:代码混淆,使难反编译
project.properties:编译API版本,如:target=android-15
26.什么叫内存泄露
内存空间在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。即所谓内存泄漏。应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。
27.静态块的执行顺序
public class A {
System.out.print(1);
public A(){
System.out.print(2);
public class B extends A{
System.out.print(“a”);
public B(){
System.out.print(“b”);
public class C {
public static void main(String[] args){
A a = new B();
a = new B();
当父类与子类都有静态代码块和构造函数的时候,执行顺序如下:
父类静态代码块&子类静态代码块
父类构造函数&子类构造函数(先有父亲,后有孩子)
静态代码块是在JVM加载类的时候执行的,而且静态代码块执行且仅执行一次
=&结果为:1a2b2b
28.Android 中有哪几种解析XML的类?官方推荐哪种?以及它们的原理和区别。
XML解析主要有三种方式,SAX、DOM、Pull。
常规在PC上开发我们使用Dom相对轻松些,但一些性能敏感的数据库或手机上还是主要采用SAX方式。
SAX读取是单向的,优点是不占内存空间、解析属性方便,但缺点就是对于套嵌多个分支来说处理不是很方便。
DOM方式会把整个XML文件加载到内存中去,因此比较耗费内存空间。
官方推荐使用:Pull。它对于节点处理比较好,类似SAX方式,同样很节省内存。
29.Intent能携带的数据有哪些
Intent包括Component、 Action、Category、Data、Type、Extra、Flag这些数据,其中Component、 Action、Category、Data、Type主要用于匹配该Intent想要启动的程序组件,Extra属性是一个Bundle对象,该对象主要用于携带多个组件交互的数据。Flag则用于指定一些启动程序的”旗标”信息,比如启动Activity时可指定如下常用Flag:
FLAG_ACTIVITY_NEW_TASK:使用一个新的Task来装载该Activity。
FLAG_ACTIVITY_NO_HISTORY:通过该Flag启动的Activity不会保存在历史Stack中。
FLAG_ACTIVITY_SINGLE_TOP:如果当前Task中已有该Activity,通过该Flag启动的
Activity将不会被启动(因为要保持只有一个实例)。
30.Android中四种启动模式
同类其他面试题 点击新一篇或旧一篇可浏览全部同类面试题
你有答案? 你对以上面试题有意见? 你想发表你的见解? 写下来吧!你的分享将会让很多人受益!
相关面试题
版权声明:本站大部分内容为原创! 另有少部分内容整理于网络,如需转载本站内容或关切版权事宜请联系站长。未经允许,严禁复制转载本站内容,否则将追究法律责任。
本站欢迎与同类网站建立友情链接,请联系QQ:

我要回帖

更多关于 android分页加载 的文章

 

随机推荐