当我们打开一个Activity时,我们就会用到Intent(意图),正如它名字一样,我们可以发送一个Intent对象来让系统打开我们所需要的组件。
比如,打开一个Activity:在我们的app中,一个Activity会占用整个屏幕。我们可以创建一个新的Activity实例将Intent对象传递给Context.startActivity(Intent intent)方法,这个Intent描述啦你想要打开的Activity以及可以携带一些你想要的信息。当我们打开的Activity结束时,如果有信息返还,则在发送Intent时调用startActivityForResult(Intent intent,int requestCode)方法,第二个参数为你发送请求的参数,可以发送不同的请求,来对结果进行不同的处理,同时,还要在发送Intent的Activity中重写onActivityResult(int requestCode,int resultCode,Intent data)方法,第一个参数为你发送的请求状态码,第二个参数为返回的结果状态码,第三个参数为携带返回的数据的Intent。
接下来是一个简单的demo,创建两个简单的Activity,布局比较简单,就不贴啦。
MainActivity.java
package com.flying.xiaopo.intentdemo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity implements View.OnClickListener {
private Button btn_start_activity, btn_start_activity_for_result;
public static final int REQUEST_CODE = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_start_activity = (Button) findViewById(R.id.btn_start_activity);
btn_start_activity_for_result = (Button) findViewById(R.id.btn_start_activity_for_result);
btn_start_activity.setOnClickListener(this);
btn_start_activity_for_result.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(this, SecondActivity.class);
switch (v.getId()){
case R.id.btn_start_activity:
startActivity(intent);
break;
case R.id.btn_start_activity_for_result:
setResult(RESULT_OK,intent);
startActivityForResult(intent,REQUEST_CODE);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Toast.makeText(this,"requestCode is" + requestCode + ",resultCode is" + resultCode,Toast.LENGTH_SHORT).show();
}
}SecondActivity.java
package com.flying.xiaopo.intentdemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
/**
* Created by lenovo on 2015/6/21.
*/
public class SecondActivity extends Activity {
private Button btn_back;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
btn_back = (Button) findViewById(R.id.btn_back);
Log.d("TAG", "Create");
btn_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setResult(RESULT_OK);
finish();
}
});
}
}接下来看一下效果:
当我们直接startActivity时,关闭打开的Activity,并没有结果返回,而当我们通过startActivityForResult打开时,当被打开的Activity调用finish()方法时,向其父Activity传递啦结果码,当然这里没有绑定data,具体方法可以查API哈。
Caution:这里传递intent的Activity不可以finish(),要是同一个实例。
同时,通过Intent,我们可以打开许多不同的组件,比如打开一个服务,调用startService()或调用bindService(),接受一个BroadReciver,通过调用sendBroadcast(),sendOrderedBroadcast()或sendStickyBroadcast()方法,具体的在我整理Service和Broadcast时会写把。
共同學習,寫下你的評論
評論加載中...
作者其他優質文章

