第三个Activity如何php传值给js第一个Activity?

&nbsp&#8250&nbsp&nbsp&#8250&nbsp
Activity的跳转与传值:startActivityForResult,setResult
Activity跳转与传值,主要是通过Intent类来连接多个Activity,以及传递数据。Intent是Android一个很重要的类。Intent直译是“意图”,什么是意图呢?比如你想从这个Activity跳转到另外一个Activity,这就是一个意图。Activity跳转,无返回结果这是最简单的Activity跳转方式。从一个Activity启动另一个Activity,直接&startActivity(new Intent(当前Activity.this, 下一Activity.class))。((Button) findViewById(R.id.Notepadv1)).setOnClickListener( new OnClickListener() {
public void onClick(View v) {
startActivity(new Intent (MyAndroidAppActivity.this, Notepadv1.class) );
});Activity跳转,返回数据/结果需要返回数据或结果的,则使用startActivityForResult (Intent intent, int requestCode),requestCode的值是自定义的,用于识别跳转的目标Activity。跳转的目标Activity所要做的就是返回数据/结果,setResult(int resultCode)只返回结果不带数据,或者setResult(int resultCode, Intent data)两者都返回!而接收返回的数据/结果的处理函数是onActivityResult(int requestCode, int resultCode, Intent data),这里的requestCode就是startActivityForResult的requestCode,resultCode就是setResult里面的resultCode,返回的数据在data里面。&MyAndroidAppActivity:static final int SEND_SMS_REQUEST = 0;
static final int CALL_REQUEST = 1;
((Button) findViewById(R.id.sms)).setOnClickListener( new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(MyAndroidAppActivity.this, SendSMSActivity.class);
startActivityForResult(intent, SEND_SMS_REQUEST);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SEND_SMS_REQUEST) {
if (resultCode == RESULT_OK) {
Toast.makeText(this, "Send SMS RESULT_OK", Toast.LENGTH_SHORT).show();
}else if (resultCode == RESULT_CANCELED) {
Bundle bundle = data.getExtras();
String phoneno = bundle.getString("phoneNO");
Toast.makeText(this, "Send SMS RESULT_CANCELED "+phoneno, Toast.LENGTH_SHORT).show();
}else if (requestCode == CALL_REQUEST) {
if (resultCode == RESULT_CANCELED) {
Toast.makeText(this, "Call RESULT_CANCELED", Toast.LENGTH_SHORT).show();
}&SendSMSActivity:((Button) findViewById(R.id.send)).setOnClickListener( new Button.OnClickListener() {
public void onClick(View v) {
SendSMSActivity.this.setResult(RESULT_OK);
SendSMSActivity.this.finish();
}):** 注意,在setResult后,要调用finish()销毁当前的Activity,否则无法返回到原来的Activity,就无法执行原来Activity的onActivityResult函数,看到当前的Activity没反应。RESULT_OK和RESULT_CANCELED是系统空间里面的常量,不需要自定义,直接使用就行。另外在运行过程中,发现按Back键后,是可以返回RESULT_CANCELED的,看了SDK doc后,原来真的是那样,而且不带有数据的。这意味着,如果你设想在返回RESULT_CANCELED时并返回数据,那么需要截获Back键的事件处理,把原来返回RESULT_CANCELED的核心逻辑copy到事件处理里面。这里给个例子:((Button) findViewById(R.id.cancel)).setOnClickListener( new Button.OnClickListener() {
public void onClick(View v) {
// 实例化 Bundle,设置需要传递的参数
Bundle bundle = new Bundle();
bundle.putString("phoneNO", "020-123");
SendSMSActivity.this.setResult(RESULT_CANCELED, SendSMSActivity.this.getIntent().putExtras(bundle));
SendSMSActivity.this.finish();
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 是否触发按键为back键
if (keyCode == KeyEvent.KEYCODE_BACK) {
// 实例化 Bundle,设置需要传递的参数
Bundle bundle = new Bundle();
bundle.putString("phoneNO", "020-123");
setResult(RESULT_CANCELED, this.getIntent().putExtras(bundle));
this.finish();
return super.onKeyDown(keyCode, event);
}这里要注意的是,在处理Back键事件后return true则表示本事件不再传递给其他函数处理,可理解为由当前函数全权负责处理,所以在return前finish当前Activity,保持原来的行为表现,当然我们可以设置为隐藏当前Activity等其他行为。Activity传送数据在上面的代码中,我们可以看到使用Bundle来存储数据,并将其putExtras到Intent里面。Bundle使用“名字-值”来存储数据。那么,从原来的Activity A传送数据到新的Activity B, Activity B如何获取传送过来的Intent参数时呢?最近写了这样的一个例子:In Activity A:// 在某个按钮响应事件里
Intent intent = new Intent(this, TextInputActivity.class);
intent.putExtra("Text", mText);
intent.putExtra("TextColor", mTextColor);
intent.putExtra("TextSize", mTextSize);
intent.putExtra("TextBold", mTextBold);
startActivityForResult(intent, REQUEST_TEXT);In Activity B:// in onCreate(Bundle savedInstanceState)
Bundle extras = getIntent().getExtras();
mText = extras.getString("Text");
mTextColor = extras.getInt("TextColor");
mTextSize = extras.getFloat("TextSize");
mTextBold = extras.getBoolean("TextBold");&
上一篇: 很多网友可能发现Android中除了Service还有一个IntentService,他们之间到底有哪些区别呢? 在继承关系上而言IntentService是Service的子类,内部实现的代码中涉及到一些Android入门开发者不了解的 Looper,Android123在早期的文章中已经说明他们的用法,这里
下一篇: 1. SQLiteDatabase 操作SQLite数据库的类。可以执行SQL语句,对数据库进行增、删、查、改的操作。也可以进行transaction的控制。很多类对数据库的操作最终都是通过SQLiteDatabase实例来调用执行的。 需要注意的是,数据库对于一个应用来说是私有的,并且在一在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
1.如何让一个Activity在按break键时不执行销毁,而是在后台隐藏(即不执行其onDestory()方法)。2.同时当我再一次通过Intent打开那个Activity时,Activity必须能够接受到新Intent传过来的值。
Ps:我发现通过网上提供的一个方法(把Activity的launchMode设置为singleInstance,同时监听break按钮事件调用 moveTaskToBack(false))能够把第一个问题解决,但是每次执行第二个问题时,那个Activity虽然会执行OnStart()等生命周期方法,但是从新Intent里取得的数据还是第一次启动Activity时Intent里面的数据。对于上面两个问题如果有更好的方法,请告诉我一下。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
Activity.onNewIntent会收到新的Intent
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。随笔 - 1046, 文章 - 0, 评论 - 0, 引用 - 0
& & & & & &
& &文/&&&skay
& & 开发中遇到多个activity的传值问题 相邻两个之间的传值 或者多个三个以上之间的传值问题
& & & &1 一般的注册或者登陆成功后 跳到某一新activity传值问题&
& & &2 &注册界面需要选择性别 &需要打开一个新的界面选择里面的信息回到当前activty的传值问题&
& & &3 &设置界面需要某一界面选择的图片(但是还没上传服务),如果中间相隔几种activty时的传值。
& & & &&目前有比较经典的四种比较经典的传值方法
& &一 如果是两个相邻activity之间的传值:
& & &可以用Intent传值 对象和单个属性都可以
& & &OneActivity 里设置
Intent intent = new Intent(OneActivity.this,TwoActivity.class);
intent.putExtra("mEmail", mEmail);
intent.putExtra("mPassword", mPassword);
startActivity(intent);
& & TwoActivity 里取值
Intent getIntent = getIntent();
String mEmail = getIntent.getStringExtra("mEmail");
String mPassword = getIntent.getStringExtra("mPassword");
& & & 当然你也可以用bundle进行封装,然后进行传值,
Intent intent = new Intent(OneActivity.this,TwoActivity.class);
Bundle bundle = new Bundle();
bundle.putString("mEmail", mEmail);
bundle.putString("mPassword", mPassword);
startActivity(intent);
二:相邻两个以上的activty之间的传值
& & 可以照搬方法一 如果从one 传到two,然后继续three,可以继续intent, 但是比较笨拙 界面一多就会晕了
& &首先可以自定义个全局类,用于储存临时数据。
public class Constant {
public static String mE
public static
&OneActivity :
Intent intent = new Intent(OneActivity.this,TwoActivity.class);
/*intent.putExtra("mEmail", mEmail);
intent.putExtra("mPassword", mPassword);*/
Constant.mEmail = mE
Constant.mPassword =mP
startActivity(intent);
这样我们在其他activty里随时可以取值,不受activity的限制,
String mEmail = Constant.mE
String mPassword = Constant.mP
mEmailView.setText(mEmail);
mPasswordView.setText(mPassword);
& &定义你需要传递的对象或者属性 在One中拿到user或者但多email和password, 去实例化赋值 然后再除了one的任何一个Activity中去取值使用 如果你的信息比较多 需要每个界面添加不同的属性给个这个对象USER 你可以拿到这个user不断去set属性值 到你最后一个界面使用的时候去取值使用就ok
,是不是挺方便的
&但是以上方式建议不要过度使用比如包含大量图片的时候 容易出现内存溢出情况,因为一开始内存就会给我开辟内存空间,如果需要持久的话我们可以用做磁盘持久,
& 这种思维也可以拓展为 数据库 网络服务器(登录后,到首页再向服务器获取) &或者xml 进行中转。&
三 如果是One 界面到two界面 拿到user,选择sex或者address, 需要回到当前ONe&的情况下
&&1 在one中使用&
& //此方法跳到B&
startActivityForResult(intent,code); //code是请求码 int类型
2 &two可以在finsh之前 将user或者某个属性扔给one界面&
Intent rIntent = new Intent();
rIntent.putExtra("sex", mSex);
rIntent.putExtra("address", mAddress);
setResult(resultCode, getIntent());
finish();resultCode 为返回码 用于区分从哪里返回。
& 3 two使用 onActivityResult方法接受此intent
四 使用回调&
& 1:在two中的定义一个回调接口:
& public interface
& & String getEmall():
&2 :one中去实现这个接口原型:
&3 two中将你需要传的值(例如email)放到接口中
two中执行此接口方法就OK 这样A 就拿到了email了&
回调的功能不值这一点哦啊 &可以在任何类里使用回调,不止仅限于activtiy
方法二也适用任何类
回调具体请看&&一文&
& &到此为止,还有一点需要说明的 ,虽然activty的启动模式并是非传值,但是当某个avtivt跳到其他界面,然后关闭在回到当前界面的时候,有的需求需要可以保留本界面的一些数据,比如用户输入还没提交过的一些数据,如editview,等待上传的照片等。我们可以作为一种传值的方式。
Activity大家知道有四种启动模式
---------------------------------------------------------------------------------------------------------------------------------------------
"standard"(默认)
standard是默认的启动模式,即如果说明aunchMode属性,则自动就会使用这种启动模式。每次打开需开启新的activity
"singleTop"
如果要启动的这个Activity在当前Task中已经存在,并且还处于栈顶的位置,那么系统就不会再去创建一个该Activity的实例,而是调用栈顶Activity的onNewIntent()方法。声明成这种启动模式的Activity也可以被实例化多次,一个任务当中也可以包含多个这种Activity的实例。
举个例子来讲,一个任务的返回栈中有A、B、C、D四个Activity,其中A在最底端,D在最顶端。这个时候如果我们要求再启动一次D,并且D的启动模式是"standard",那么系统就会再创建一个D的实例放入到返回栈中,此时栈内元素为:A-B-C-D-D。而如果D的启动模式是"singleTop"的话,由于D已经是在栈顶了,那么系统就不会再创建一个D的实例,而是直接调用D Activity的onNewIntent()方法,此时栈内元素仍然为:A-B-C-D。
"singleTask"
这种启动模式表示,系统会创建一个新的任务,并将启动的Activity放入这个新任务的栈底位置。但是,如果现有任务当中已经存在一个该Activity的实例了,那么系统就不会再创建一次它的实例,而是会直接调用它的onNewIntent()方法。声明成这种启动模式的Activity,在同一个任务当中只会存在一个实例。注意这里我们所说的启动Activity,都指的是启动其它应用程序中的Activity,因为"singleTask"模式在默认情况下只有启动其它程序的Activity才会创建一个新的任务,启动自己程序中的Activity还是会使用相同的任务,
"singleInstance"
这种启动模式和"singleTask"有点相似,只不过系统不会向声明成"singleInstance"的Activity所在的任务当中再添加其它Activity。也就是说,这种Activity所在的任务中始终只会有一个Activity,通过这个Activity再打开的其它Activity也会被放入到别的任务当中。
------------------------------------------------------------横线中数据来自网络 特此说明-------------------------------------------------------------------------
通过设置启动模式我们可以轻而易举的回去到保留的数据 可以通过
onCreate(Bundle savedInstanceState)
中的bundle数据用于获取任务中的此界面记录的数据,然后恢复到本身activity中。从一个activity里传值到另一个activity里,怎么编写代码?_百度知道
从一个activity里传值到另一个activity里,怎么编写代码?
我有更好的答案
ctivity跳转与传值,主要是通过Intent类来连接多个Activity,以及传递数据.setClassName( getApplicationContext();/ 关闭当前页面
System.exit(0);
/&#47.this.finish()。从一个Activity启动另一个Activity,直接startActivity(new Intent(当前Activity.this, &com.example.
//, &quot,否则得到空值
String rString = getIntent().getExtras().getString(&我是key&quot.LENGTH_SHORT).makeText(ReceiveActivity./SendA此处使用putE/无论是exit还是finish都是可以的
});Bundle类用作携带数据;
Toast, 下一Activity, rString, T
//下一个activity使用toast来显示 btnReceiveButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
/&#47,接受方就响应的使用getExtra
intent.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(),用于存放key-value名值对形式的值
Bundle b = new Bundle(),它类似于Map.ReceiveActivity& );第一参数取的是这个应用程序的C);),生命周期是整个应用
/最后的参数一定要和发送方的相同;/第二个参数是要跳转的页面的全路径
b.putString(&我是key&quot.putExtras( b );
startActivity(intent);
/这里就是你要传递的内容了&quot.class))当前activity的按钮事件btnSendButton
采纳率:63%
为您推荐:
其他类似问题
勃兰兑斯的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 oc给js传值 的文章

 

随机推荐