【发布时间】:2015-11-11 01:50:46
【问题描述】:
我们鼓励在传递参数时使用静态初始化器(又名the newInstance() pattern)每个Fragment。如果是Activity,则没有提及。并且每次我们要开始一个活动时,我们必须先创建一个Intent,如下所示:
public class FirstActivity extends Activity {
...
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
...
}
如果我们想要传递一些参数,这会变得更加复杂,因为我们需要为每个参数命名,如下所示:
public class FirstActivity extends Activity {
...
int age = 10;
int count = 20;
String message = "hello";
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("Age", age);
intent.putExtra("Count", count);
intent.putExtra("Message", message);
startActivity(intent);
...
}
在 SecondActivity 中,我们应该检索这些具有相同名称的参数:
public class SecondActivity extends Activity {
...
int mAge;
int mCount;
String mMessage;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mAge = getIntent().getIntExtra("Age", 0);
mCount = getIntent().getIntExtra("Count", 0);
mMessage = getIntent().getStringExtra("Message");
}
...
}
此外,我们使用的这些名称,“Age”、“Count”和“Message”是硬编码且容易出错的。大多数情况下,我们使用一个辅助类,称为 IntentExtraKeys,并使用该类中的名称,如下所示:
public class IntentExtraKeys{
public static final String AGE_KEY = "age_key";
public static final String COUNT_KEY = "count_key";
public static final String MESSAGE_KEY = "message_key";
}
在活动中:
public class FirstActivity extends Activity{
...
intent.putExtra(IntentExtraKeys.AGE_KEY, age);
...
}
和
public class SecondActivity extends Activity{
...
mAge = getIntent().getIntExtra(IntentExtraKeys.AGE_KEY, 0);
...
}
除此之外,我们可以有如下内容:
public class FirstActivity extends Activity{
....
SecondActivity.startActivity(this, age, count, message);
...
}
和
public class SecondActivity extends Activity{
...
private static final String AGE_KEY = "age_key";
private static final String COUNT_KEY = "count_key";
private static final String MESSAGE_KEY = "message_key";
public static void startActivity(Context context, int age, int count, String message){
Intent intent = new Intent(context, SecondActivity.class);
intent.putExtra(AGE_KEY, age);
intent.putExtra(COUNT_KEY, count);
intent.putExtra(MESSAGE_KEY, message);
context.startActivity(intent);
}
...
}
这样,每次我们想要启动活动时,我们就不用编写代码来创建Intent,如果我们要传递一些参数,我们不需要给它们命名。只有我们开始的活动知道他们的名字,而且看起来更干净,就像在fragments 中一样。
这是糟糕的设计吗?为什么这不常见?
【问题讨论】:
-
我实际上是为很多活动、服务,尤其是意图服务这样做的。对于内部操作,我认为这种模式没有任何问题。如果使用隐式意图等,可能不会使用它。
标签: android android-activity static-methods