Activity与Intent通信机制

[b]1、使用Intent对象来指定一个Activity,并通过startActivity或startActivityForResult方法启动该Activity.以及在Activity之间传递数据:[/b]
public class MainActivity extends Activity {  
private Button btn1,btn2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout view = new LinearLayout(this);
view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

btn1 = new Button(this);
btn1.setId(1);
btn1.setText("使用类名开启另一个Activity");
btn1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

btn2 = new Button(this);
btn2.setId(2);
btn2.setText("使用action开启另一个Activity");
btn2.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

view.addView(btn1);
view.addView(btn2);
setContentView(view);

btn1.setOnClickListener(listener);
btn2.setOnClickListener(listener);
}

private View.OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
switch (view.getId()) {
case 1:
intent.setClass(MainActivity.this, ResultActivity.class);
intent.putExtra("name", "JAVA");
startActivityForResult(intent, 222);
break;
case 2:
intent.setAction("forResult");
MyData myData = new MyData();
//使用putExtra传递自定义对象时,该对象必须实现序列化,该类中所有成员属性也必须实现序列化接口
intent.putExtra("data", myData);
startActivity(intent);
break;
default:
break;
}
}
};

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//requestCode是请求码,即startActivityForResult(intent, 222)中的第二个参数
//resultCode是结果码,即setResult(333)中设置的数字
switch (requestCode) {
case 222:
if(resultCode == 333){
Toast.makeText(this, "无结果返回...", Toast.LENGTH_LONG).show();
} else if(resultCode == 444){
Toast.makeText(this, data.getStringExtra("result"), Toast.LENGTH_LONG).show();
}
break;
default:
break;
}
}
}

public class ResultActivity extends Activity {
private Button btn1 , btn2;
private TextView tv;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

intent = getIntent();

LinearLayout view = new LinearLayout(this);
view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));

tv = new TextView(this);
tv.setText("name is "+intent.getStringExtra("name"));
tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));

btn1 = new Button(this);
btn1.setId(1);
btn1.setText("Back1");
btn1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));

btn2 = new Button(this);
btn2.setId(2);
btn2.setText("Back2");
btn2.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));

view.addView(tv);
view.addView(btn1);
view.addView(btn2);

btn1.setOnClickListener(listener);
btn2.setOnClickListener(listener);
setContentView(view);
}

private View.OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()) {
case 1:
setResult(333);
break;
case 2:
intent.putExtra("result", "带结果返回");
setResult(444, intent);
break;
default:
break;
}
ResultActivity.this.finish();
}
};

}

public class Result2Activity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyData data = (MyData)getIntent().getSerializableExtra("data");
setTitle(data.value);
}
}

public class MyData implements Serializable {
public String value = "this is test";
}

[b]
2、Intent指定Activity的方式[/b]

2.1 直接使用Class
intent.setClass(MainActivity.this, ResultActivity.class);

<activity Android:name=".ResultActivity"></activity>

2.2 使用Action
intent.setAction("forResult");
<activity android:name=".Result2Activity">
<intent-filter>
<action android:name="forResult"></action>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</activity>

2.3 使用包名
 ComponentName cn = new ComponentName(MainActivity.this, "com.zj.activity.another.ActivityA");
intent.setComponent(cn);

<activity android:name=".another.ActivityA"></activity>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值