1.正向传递数据
当我们通过startActivity(Intent)来启动Activity的时候,可以利用传入的Intent参数附带一些数据,传递到新的Activity中去。
public class MainActivity extends AppCompatActivity {
int postParameters = 1;
@Override
protected void onCreate(Bundle savedInstanceState){
利用SecondActivity的静态方法,启动SecondActivity并传递数据
Intent intent = SecondActivity.newIntent(MainActivity.this, postParameters);
startActivity(intent);
}
}
public class SecondActivity extends AppCompatActivity {
private final static String POST_PARAMETERS = "post_parameters";
利用静态方法构建Intent,是一种良好的编码风格,同时有很好的封装性。
public static Intent newIntent(Context packageContext, int postParameters) {
Intent intent = new Intent(packageContext, SecondActivity.class);
intent.putExtra(POST_PARAMETERS, postParameters);
return intent;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
获取传递的数据
int postParameters = getIntent().getIntExtra(POST_PARAMETERS, 0);
}
}
利用静态方法构建Intent,将数据的键值和Intent都封装在子Activity中,不向外界泄露。这是一种良好的编码风格,有很好的封装性。
2.获取返回数据
当需要从子Activity获取返回信息时,可以调用startActivityForResult(Intent intent, int requestCode)来启动子Activity。第一个参数是intent,第二个参数是请求码。在一个Activity启动多个不同类型的子Activity,且需要判断返回消息是来自哪个子Activity时,就会用到请求码。
在子Activity中调用setResult(int resultCode, Intent data)来向父Activity返回信息。一般来说resultCode有两种情况:Activity.RESULT_OK和Activity.RESULT_CANCELED。若有信息数据需要回传给父Activity,则需要创建一个空Intent并附加上数据。
最后,需要在父Activity中调用onActivityResult(int requestCode, int resultCode, Intent data)来处理返回数据。根据requestCode和resultCode来判断是由哪个子Activity所返回的数据,利用返回的data获取数据。
public class MainActivity extends AppCompatActivity {
private final static int REQUEST_CODE_SECOND = 0;
@Override
protected void onCreate(Bundle savedInstanceState){
int postParametets = 1;
Intent intent = SecondActivity.newIntent(MainActivity.this, postParameters);
startActivityForResult(intent, REQUEST_CODE_SECOND);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode) {
case: REQUEST_CODE_SECOND
if(resultCode == Activity.RESULT_OK){
// 利用静态方法获取数据,不暴露键值,封装性好
int returnParameters = SecondActivity.getReturnParameters(data);
}
break;
default:
break;
}
}
}
public class SecondActivity extends AppCompatActivity {
private final static String POST_PARAMETERS = "post_parameters";
private final static String RETURN_PARAMETERS = "return_parameters";
public static Intent newIntent(Context packageContext, int postParameters) {
Intent intent = new Intent(packageContext, SecondActivity.class);
intent.putExtra(POST_PARAMETERS, postParameters);
return intent;
}
public static int getReturnParameters(Intent data) {
return data.getIntExtra(RETYRN_PARAMETERS, 0);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
//获取传递的数据
int postParameters = getIntent().getIntExtra(POST_PARAMETERS, 0);
//设置返回数据
setReturnParameters(postParameters);
}
private Intent setReturnParameters(int postParameters) {
int returnParameters = postParameters + 1;
Intent intent = new Intent();
intent.putExtra(RETURN_PARAMETERS, returnParameters);
setResult(Activity.RESULT_OK, intent);
}
}
上述代码多次使用SecondActivity的静态方法(包括获取数据的的时候),目的是保持良好的封装性,不向外暴露存储数据的键值,以及Intent的相关信息。这种编码风格需要多加练习。
网友评论