我有两项活动几乎做同样的事情。唯一不同的是要解析的URL。
什么是关于Android开发的最佳做法,子类只是设置URL或通过意图发送URL?
public SuperActivity extends Activity{
protected String pageUrl;
@Override
protected void onCreate(Bundle savedInstanceState) {
[...lots of stuff...]
super.onCreate(savedInstanceState);
}
}
public SubActivityOne extends SuperActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
pageUrl = "http://urlOne.com"
super.onCreate(savedInstanceState);
}
}
public SubActivityTwo extends SuperActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
pageUrl = "http://urlTwo.com"
super.onCreate(savedInstanceState);
}
}
或
public SuperActivity extends Activity{
private String pageUrl;
@Override
protected void onCreate(Bundle savedInstanceState) {
Bundle extras = getIntent().getExtras();
pageUrl = extras.getString("intent_key_url");
[...lots of stuff...]
super.onCreate(savedInstanceState);
}
}
答案 0 :(得分:3)
intents
(或者Static
)答案 1 :(得分:2)
在你的情况下,我会进行子类化,但与你的做法略有不同。在onCreate
中放置一些代码并不是绝对需要时,这是危险的。 (您可能会在层次结构中迷失,而不是按正确的顺序调用您想要调用的内容)我会使用覆盖方法而不是变量。那样做:
public abstract SuperActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
[...lots of stuff...]
// instead of using pageUrl, use a method when you need it: pageUrl()
super.onCreate(savedInstanceState);
}
protected abstract String pageUrl();
}
你的子活动看起来像:(这里只显示一个)
public SubActivityOne extends SuperActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected String pageUrl() {
return "http://urlOne.com";
}
}
意图方式也很好,但是如果你以后希望在子活动中添加更多差异,它可能会变得复杂。对于子类,它非常灵活。
答案 2 :(得分:1)
为避免重复代码(这主要是好事),请创建基本活动类(将其设为abstract
)并将公共代码放在那里。然后让你的“真实”活动扩展基类。所以选项“A”就是这样。
答案 3 :(得分:1)
第三个选项是创建一个回调接口,并让你想要实现它的任何类。像“PageUrlProvider”
这样的东西public interface PageUrlProvider
{
String getPageURL();
}
然后具体实现
public MyActivity extends Activity implements PageUrlProvider
{
private String pageUrl ="http://example.com/";
@Override
protected void onCreate(Bundle savedInstanceState)
{
String myURL = getPageURL();
super.onCreate(savedInstanceState);
}
@Override
public String getPageURL()
{
return pageUrl;
}
}
您选择哪个选项很大程度上取决于您要完成的任务。但是这个选项提供了很大的灵活性。