当前位置: 网学 > 编程文档 > Android > 正文

Android 中的回调函数 onActivityResult

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: myeducs.cn 发布时间: 13/03/17

【网学网提醒】:网学会员鉴于大家对十分关注,论文会员在此为大家搜集整理了“Android 中的回调函数 onActivityResult”一文,供大家参考学习


    Android中的回调函数onActivityResult.
    根据文档的解释,Activity是Android开发中非常重要的一个基础类。我把它想像成J2ME中的Display类,或者是Win32平台上的Form类,也许不准确,但是它的重要性我觉得应该是一样的(当然,如果我们写的是一个没有界面的应用,例如后台运行的服务之类的,可以不用Display的)。
    1.在一个Activity中使用多个View
    如果把Activity看作MVC中的Control?它负责管理UI和接受事件(包括用户的输入),虽然说一个Activity通常对应一个屏幕,但事实上,我们是可以只用一个Activity管理多个不同的View来实现简单的逻辑。
    首先,我们增加一个新的资源描述layout/second.xml。
    
        android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
        android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Hello中国"
    />
        android:layout_width="wrap_content"android:layout_height="wrap_content"
    android:text="back">
    
    
    
    除了一个“Hello中国”以外,增加一个按钮可以返回前一个界面。然后,在代码中我们要为helloTwo增加两个方法,setViewOneCommand和setViewTwoCommand,分别处理一下在不同界面时,从资源里加载组件并为组件绑定一个事件处理器。
    publicvoidsetViewOneCommand()
    ...{
    Buttonbtn=(Button)findViewById(R.id.go);
    btn.setOnClickListener(newView.OnClickListener()
    ...{
    publicvoidonClick(Viewv)
    ...{
    helloTwo.this.setContentView(R.layout.second);
    helloTwo.this.setViewTwoCommand();
    }
    });
    ButtonbtnExit=(Button)findViewById(R.id.exit);
    btnExit.setOnClickListener(newView.OnClickListener()...{
    publicvoidonClick(Viewv)...{
    helloTwo.this.finish();
    }
    });
    }
    publicvoidsetViewTwoCommand()
    ...{
    ButtonbtnBack=(Button)findViewById(R.id.go2);
    btnBack.setOnClickListener(newView.OnClickListener()...{
    publicvoidonClick(Viewv)...{
    helloTwo.this.setContentView(R.layout.main);
    helloTwo.this.setViewOneCommand();
    }
    });
    }
    最后,我们需要在onCreate的时候,也就是启动后的main界面上设置一下按钮事件处理器。新的onCreate方法如下:
    publicvoidonCreate(Bundleicicle)...{
    super.onCreate(icicle);
    setTheme(android.R.style.Theme_Dark);
    setContent
    View(R.layout.main);
    setViewOneCommand();
    }
    编译,运行,OK。
    2.还是回到正道上,多个Activity之间的跳转
    Android中提供一个叫Intent的类来实现屏幕之间的跳转,按文档的说法,似乎他们也建议采用这种方法,Intent的用法比较复杂,现在我先看看它最简单的用法。
    先在应用中增加两个Activity,这需要修改AndroidManifest.xml文件了,如下:
    
        package="cn.sharetop.android.hello.three">
    
    
    
    
    
    

    
    
    
    
    
    很简单,就是加一个标签而已,新标签的class是.HelloThreeB,显示的应用标题与前一个Activity一样而已,然后第二步就是修改一个HelloThree类的实现,在onCreate方法中绑定按钮的事件处理器:
    publicvoidonCreate(Bundleicicle)...{
    super.onCreate(icicle);
    setTheme(android.R.style.Theme_Dark);
    setContentView(R.layout.main);
    setViewOneCommand();
    }
    publicvoidsetViewOneCommand()
    ...{
    Buttonbtn=(Button)findViewById(R.id.go);
    btn.setOnClickListener(newView.OnClickListener()
    ...{
    publicvoidonClick(Viewv)
    ...{
    Intentintent=newIntent();
    intent.setClass(HelloThree.this,HelloThreeB.class);
    startActivity(intent);
    finish();
    }
    });
    ButtonbtnExit=(Button)findViewById(R.id.exit);
    btnExit.setOnClickListener(newView.OnClickListener()...{
    publicvoidonClick(Viewv)...{
    HelloThree.this.finish();
    }
    });
    }
    这里的跳转功能用Intent来操作,它的最简单用法就是用函数setClass()设置跳转前后两个Activity类的实例,然后调用Activity自己的startActivity(intent)即可。最后一句finish()表示将当前Activity关掉(如果不关掉会如何?你可以自己试一下看效果,事实上有时我们是不需要关掉当前Activity的)。
    然后,我们同样弄一个Activity类HelloThreeB,代码与前面的差不多,只是将setClass的两个参数反一下,这样就可以简单地实现在两个Activity界面中来回切换的功能了。
    3.如果我想在两个Activity之间进行数据交换,怎么办?
    前例中的startActivity()只有一个参数,如
    果需要向新打开的Activity传递参数,我们得换一个函数了,Android提供了startSubActivity(Intent,int)这个函数来实现这个功能。
    函数原型为:publicvoidstartSubActivity(Intentintent,intrequestCode)
    这里的requestCode用来标识某一个调用,一般由我们定义一个常量。
    如何把参数传过去呢?Intent类在提供setClass()函数的同时也提供了一个setData()函数。
    函数原型为:publicIntentsetData(ContentURIdata)
    参数类型是ContentURI,它的详细内容下回再分析,现在就把它当成一个String类型来用吧。
    参数带到新的Activity后,同样用Activity.getIntent()函数可以得到当前过来的Intent对象,然后用getData()就取到参数了。
    把参数带回来的方法是Activity.setResult(),它有几个形式,现在先看最简单的一个吧。
    函数原型是:publicfinalvoidsetResult(intresultCode,Stringdata)
    resultCode是返回代码,同样用来标识一个返回类型,而data则是它要返回的参数。
    在原来的Activity中的事件处理回调函数onActivityResult,会被系统调用,从它的参数里可以得到返回值。
    函数原型为:protectedvoidonActivityResult(intrequestCode,intresultCode,Stringdata,Bundleextras)
    这里的requestCode就是前面启动新Activity时的带过去的requestCode,而resultCode则关联上了setResult中的resultCode,data是参数,extras也是一个很重要的东西,后面再研究一下它的作用。
    下面,我们来看一下代码吧,先看看HelloThree中的代码:
    publicvoidsetViewOneCommand()
    ...{
    Buttonbtn=(Button)findViewById(R.id.go);
    btn.setOnClickListener(newView.OnClickListener()
    ...{
    publicvoidonClick(Viewv)
    ...{
    try
    ...{
    Intentintent=newIntent();
    intent.setClass(HelloThree.this,HelloThreeB.class);
    intent.setData(newContentURI("One"));
    startSubActivity(intent,REQUEST_TYPE_A);
    }
    catch(Exceptionex)...{}
    }
    });
    ButtonbtnExit=(Button)findViewById(R.id.exit);
    btnExit.setOnClickListener(newView.OnClickListener()...{
    publicvoidonClick(Viewv)...{
    HelloThree.this.finish();
    }
    });
    }
    protectedvoidonActivityResult(intrequestCode,intresultCode,
    Stringdata,Bundleextras)
    ...{
    if(requestCode==REQUEST_TYPE_A)...{
    if(resultCode==RESULT_OK)...{
    Log.v(TAG,data);
    TextViewtxt=(TextView)findViewById(R.id.txt);
    txt.setText(data);
    }
    }
    }
    这里的REQUEST_TYPE_A是我们定义的一个
    常量。在onActivityResult中用它与RESULT_OK一起作为条件判断如何处理返回值,这里只是简单将TextView显示值换成传来的字串。
    再来看看另一个HelloThreeB类的实现代码:
    privateIntenti;
    protectedvoidonCreate(Bundleicicle)...{
    super.onCreate(icicle);
    setContentView(R.layout.second);
    
    i=getIntent();
    
    android.util.Log.v(TAG,"onCreate");
    Buttonbtn=(Button)findViewById(R.id.go);
    btn.setOnClickListener(newView.OnClickListener()...{
    publicvoidonClick(Viewv)...{
    Stringresult=HelloThreeB.this.i.getData().toString()+"AndTwo";
    HelloThreeB.this.setResult(RESULT_OK,result);
    finish();
    }
    });
    
    TextViewv=(TextView)findViewById(R.id.txt);
    v.setText("Paramis"+i.getData().toString());
    
    }
    在按钮处理事件中,从Intent取出参数,处理一下再用setResult返回给前一个Activity即可。
    编译运行即可。
    
    
  • 上一篇资讯: Android 内核移植
  • 下一篇资讯: Android 中Monkey的用法
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号