有什么区别?我正在从教程中学习如何将字符串从一个活动传递到另一个活动,这个人使用以下代码从数据的EditText中获取信息,并将其传递到OpenedClass的TextView:
public class Data {
EditText sendET;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.get);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.bSA:
String bread=sendET.getText().toString();
Bundle basket=new Bundle();
basket.putString("key", bread);
Intent a= new Intent(Data.this, OpenedClass.class);
a.putExtras(basket);
startActivity(a);
break;
}
}
//这边是另一班
public class OpenedClass{
@Override
protected void onPostCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onPostCreate(savedInstanceState);
setContentView(R.layout.send);
Bundle gotBasket=getIntent().getExtras();
gotBread=gotBasket.getString("key");
question.setText(gotBread);
}
}
我不能用替换OpenedClass中的最后3行吗
question.setText(Data.sendET.getText().toString());
避免在Data类中创建Bundle、添加Extras等。区别是什么?为什么我应该选择更复杂的,因为从视觉上看,它会带来相同的结果。
Data中的EditText(我认为它扩展了Activity)将引用该Activity的上下文。如果您将sendET设置为static,那么您将静态引用该活动的上下文。当该Data活动完成时,您将通过静态sendET EditText 泄漏其上下文
如果您的活动失去焦点(可能有电话打来),则无法保证您的活动在恢复时仍在内存中。
如果系统出于任何原因杀死了它,那么活动中的所有内容都将丢失。但是,额外费用将作为"活动"的一部分予以保留。然后你可以重新创建你的状态。
为了更容易处理我的Extras\Activities,我通常会向它们添加一个静态方法来处理捆绑包的创建和启动。
启动"活动"就像调用此方法一样简单。
例如
public static void Launch(Activity oldActivity, int parameter) {
Intent i = new Intent(oldActivity, ThisActivity.class);
i.putExtra("PARAM", parameter);
oldActivity.startActivity(i);
}