1

我有两个活动几乎做同样的事情。它们唯一不同的是要解析的 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);
    }
}
4

4 回答 4

3
  • 如果您有多个活动,它们共享相似的功能(和/或变量/方法)-> 进行子分类。
  • 如果您只需要从调用活动中传递一个值,请使用intents(或可能Static
于 2012-09-11T09:11:18.597 回答
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";
    }
}

意图方式也很好,但是如果以后您想在子活动中添加更多差异,它可能会变得复杂。使用子类,它非常灵活。

于 2012-09-11T09:05:38.227 回答
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;
    }

}

您选择哪个选项在很大程度上取决于您要完成的任务。但是这个选项提供了很大的灵活性。

于 2012-09-11T09:20:29.707 回答
1

为避免重复代码(这主要是好事),制作基本活动类(make it abstract)并将您的通用代码放在那里。然后让你的“真实”活动扩展基类。所以选项“A”是方式。

于 2012-09-11T08:56:02.943 回答