我正在使用Intent启动活动,如下所示:
来源:
public class ChallongeLogin extends Activity
{
public static String API_KEY, SUBDOMAIN;
public void onClick(View view)
{
API_KEY = api_key.getText().toString();
SUBDOMAIN = subdomain.getText().toString();
Intent intent = new Intent(this, ChallongeEvents.class);
startActivity(intent);
}
}
目标:
public class ChallongeEvents extends Activity implements View.OnClickListener
{
String API_KEY = ChallongeLogin.API_KEY;
String SUBDOMAIN = ChallongeLogin.SUBDOMAIN;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_challonge_events);
}
}
正如您所看到的,我所做的就是创建ChallongeEvents
类时,我只需从ChallongeLogin
获取静态值并将它们放入局部变量中。
现在查看Google的官方Android教程: http://developer.android.com/training/basics/firstapp/starting-activity.html
他们做的有点不同。它们不是使用从原始源调用的静态值,而是使用putExtra
传递数据:
intent.putExtra(EXTRA_MESSAGE, message);
然后他们用:
检索它String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE);
他们为什么要做这些额外的步骤?我这样做有什么不对吗?
答案 0 :(得分:4)
我们将对象解析为intent的额外内容的原因是您为该特定结果的意图实例保留状态。
您正在为ChallengeLogin活动的每个实例设置您希望与之交互的对象的值。如果在开始上一次交互的意图时访问和/或修改此挑战活动,您将收到当前实例化的值,而不是在意图启动时需要转换的值。
这就是公正,以及为什么在开始活动时静态调用不是满足您需求的最佳方式。
此外,您也可以完成此操作:Using putExtra() and getExtra().