
requestCode是用来在主页面回收子页面的消息用的
在主页面中重写:
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == YOUR_REQUEST_CODE) {//这里填写你的requestcode
if (resultCode == RESULT_OK) {
//你要执行的任务
}
}
}
}
在子页面重写 public void onBackPressed(){// 按下返回键的事件
superonBackPressed();
setResultCode(RESULT_OK);
}
如果你想从主页面向子页面传数据 ,请给intent里面添加数据即可
使用Broadcast广播即可
android系统中,BroadcastReceiver的设计初衷就是从全局考虑的,可以方便应用程序和系统、应用程序之间、应用程序内的通信
在获取消息activity中建立BroadcastReceiver内部类,并且注册广播
示例代码如下
//接受消息的activitypublic class MainActivity extends Activity {
private InnerReceiver receiver = new InnerReceiver();
@Override
protected void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
setContentView(Rlayoutactivity_main);
}
@Override
protected void onRestart() {
superonRestart();
//注册广播
IntentFilter filter = new IntentFilter("test");
registerReceiver(receiver, filter);
}
@Override
protected void onStop() {
superonStop();
取消广播
unregisterReceiver(receiver);
}
public class InnerReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
//使用intent获取发送过来的数据
String msg = intentgetStringExtra("msg");
}
}
}package comexampledemo;
import androidappActivity;
import androidcontentIntent;
import androidosBundle;
import androidviewView;
import androidviewViewOnClickListener;
import androidwidgetButton;
import androidwidgetEditText;
//发送消息的activity
public class SendActivity extends Activity {
private Button btn;
private EditText text;
@Override
protected void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
setContentView(Rlayoutactivity_main);
btn = (Button)findViewById(Ridbutton);
text = (EditText)findViewById(Ridtext);
btnsetOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("test");
intentputExtra("msg", textgetText()toString());
sendBroadcast(intent);
}
});
}
}
Activity之间是如何调用的
在javaWeb程序中,jsp与jsp之间的调用是通过重定向完成的,而在Android中,Activity与Activity之间的切换是通过Intent来完成的。
所
谓Intent,它是Android中非常重要的内置组件,他可以理解为“我要干一件什么事情”。在Android中有3大组
件:Activity,Service、Broadcast,他们之间的通信都是通过Intent来完成的,所以Intent其实就是告诉他们之间的每一
个人,要干什么事情。
创建自己的Activity
高焕堂先生的Android讲义中有如下一段内容:
Android的4种嫡系组件(即Activity、Service、IntentReceiver和ContentProvider)之间如何互相沟通呢?这4种嫡系组件都是由Android启动的,并不是组件之间透过直接呼叫而启动的。
这
段文字总结的十分精辟,它告诉了读者(以Activity为例)Activity是Android自启动的,这样的话,编程人员必须要明确告诉
Android“我的应用程序里面有哪些是你要给我启动的”,而如何告诉Android这些信息呢,Android为我们提供了一个
AndroidManifestxml文件。在这个文件中,就可以告诉Android这些内容。这也是为什么我们在建立了自己的Activity、
ContentProvider等之后,必须要在配置文件中进行配置的原因。
以下代码是在自己定义的一个名为SecondActivity的Activity,其配置代码如下:
<activity android:name="SecondActivity"
android:label="secondActivity">
</activity>
在android:name一项中中的“”代表在当前配置文件的默认包名之下。
Activity之间的切换
从一个Activity调用另一个Activity,十分简单,只需要创建一个Intent,并且告诉Intent我从哪来,要到哪去,然后执行这个Intent,就可以了。示例代码如下:
Intent i = new Intent(TestActivitythis,SecondActivityclass);
startActivity(i);
当
然,这样只能够做到Activity之间的切换,如果想在切换的同时,由旧的Activity向新的Activity传递一些参数,那么就要在
startActivity()方法之前,为Intent添加参数,通过putExtra(string,xxx)这组方法,就可实现。
putExtra(string,xxx)方法类似于map,键都是String型,值有不公类型,该方法被重载,具体可参考API,示例代码如下:
Intent i = new Intent(TestActivitythis,SecondActivityclass);
iputExtra("uName", "legend");
iputExtra("uAge", (short)18);
startActivity (i);
获取Intent传递的值
旧的Activity将值传递给了新的Activity,那么在新的Activity中,要通过getIntent()方法,方可接收传递过来的Intent。得到Intent后通过getxxxExtra()方法,可以取得不同类型的值。如下所示:
Intent i = getIntent();
String uName = igetStringExtra("uName");
short uAge = igetShortExtra("uAge", (short) 0);
旧Activity得到新Activity结束后传递的Intent
在
开发中,有这种情况,比如说我们的一个Activity要调用一个新的Activity,让后用户对新的Activity *** 作完成后,关闭新的
Activity,这时需要将新的Activity中的一些值传递给旧的Activity。这就中情况不用自己处理,Android已经为我们编写了一个
onActivityResult(int requestCode, int resultCode, Intent
data)方法,专门处理这种情况。
首先,在旧的Acitvity中的启动Intent方法不能再使用之前的
startActivity,而要给用startActivityForResult(i, REQUESTCODE1
);方法,该方法第一个参数为要传递的intent,第二个参数为请求码,该请求码其实就是一个整型变量,用于指明是那个方法、或者说是那个控件启动了该
intent,其最主要的目的是在onActivityResult(int requestCode, int resultCode, Intent
data)方法中,编程使用。读者这里可以不用深究,看到例子后,便会明白。该处代码如下:
Intent i = new Intent(TestActivitythis,SecondActivityclass);
iputExtra("uName", "legend");
iputExtra("uAge", (short)18);
startActivityForResult(i, REQUESTCODE1 );
其
次,在新的Activity中要接受刚刚传递的Intent,接受方法如上所述,这里不再赘述。在新的Acitvity处理完成后,需要同过
setResult(Intent
i)方法来设置新的Activity结束后需要传递会旧的Activity的Intent。之后调用新的Activity的finish()方法,结束新
的Acitvity就可以了。代码如下:
Intent resultIntent = new Intent();
resultIntentputExtra("uName", "legend2");
resultIntentputExtra("uAge", (short)22);
setResult(RESULTCODE1, resultIntent);
SecondActivitythisfinish();
最后,在旧的Activity中重写onActivityResult(int requestCode, int resultCode, Intent data)方法,该方法的三个参数,这里就不在赘述了,相信读者一看即明白,这里给出代码如下:
if(requestCode == REQUESTCODE1){
Systemoutprintln("REQUESTCODE equal");
if(resultCode == SecondActivityRESULTCODE1){
Systemoutprintln("RESULTCODE equal");
String uName = datagetStringExtra("uName");
short uAge = datagetShortExtra("uAge", (short)0);
tvsetText("uName:"+uName+" uAge:"+uAge);
}
}
参考程序
ActivityTest
补充:
在
Intent中,可以携带Object类型的信息,读者查阅API后,可能会放先,putExtra()方法中,并没有实现object的,但是重载了如
下的方法:putExtra(String name, Serializable
value),只要将对象实现了Serializable接口,就可以添加进Intent了。
对象序列化及反序列化
一个对象产生后,实际上是在内存中开辟了一个存储空间,方便存储信息。
对象的序列化,就是一个对象变成二进制数据流的一种方法,通过对象的序列化可以方便的实现对象的传输与存储。
如果一个类的对象想要被序列化,必须实现Serializable接口,但是该接口中无方法,它属于一个标示接口,表示具备了某种能力。
序列化和反序列化,可以理解为:
序列化:程序àObjectOutputStreamà序列化对象
反序列化:序列化对象àObjectInputStreamà程序
在序列化的时候,可以通过serialVersionUID来标识序列化版本。
值得注意的是,序列化存储的只是对象的成员变量。
ObjectInputStream中的readObject()方法可读取对象。
ObjectOutputStream中的writeObject()方法可写入对象。
可以的,在adapter的构造方法中将显示ListView的那个Activiy传进来。然后用传进来的activity的实例跳转。如:activitystartActivity(intent);
有两种方法可以启动:
1 先说在setClass启动一个Activity的方法吧:
Intent intent = new Intent();
intentsetClass(this, CreatePlaylistclass) //参数一为当前Package的context,t当前Activity的context就是this,其他Package可能用到createPackageContex()参数二为你要打开的Activity的类名
startActivity(intent);
2 通过Component Name来打开的方式
Intent intent = new Intent();
intentsetAction(IntentACTION_MAIN); //添加一些特性,具体可以查看Intent文档,相关属性的介绍
intentaddCategory(IntentCATEGORY_LAUNCHER);
intentsetFlags(IntentFLAG_ACTIVITY_NEW_TASK | IntentFLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
//通过Bundle向要打开的的Activity传递一些数据
Bundle bundle = new Bundle();
bundleputString("data", new String(" Hello World"));
intentputExtras(bundle);
intentsetComponent(new ComponentName(
new String("comandroidtestActivity"), new String("comandroidtestActivitytestActivity")));
startActivity(intent);
/ Return the intent that started this activity /
public Intent getIntent() {
return mIntent;
}
源码注释说的很清楚,返回启动这个Activity的Intent
以上就是关于android:主页面startactivityforresult(intent,requestCode)跳转后子页面如何得到requestCode这个值全部的内容,包括:android:主页面startactivityforresult(intent,requestCode)跳转后子页面如何得到requestCode这个值、android怎么从一个activity获取另一个activity的信息、如何在 Activity 之间传递参数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)