1

ほぼ同じことをする2つの活動があります。それらが異なるのは、解析されるURLだけです。

URLを設定するため、またはインテントを介してURLを送信するためだけに、Android開発、サブクラスに関してベストプラクティスと見なされるものは何ですか?

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();
}

そして、あなたのサブアクティビティは次のようになります:(ここに表示されているのは1つだけです)

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

3番目のオプションは、コールバックインターフェイスを作成し、それを実装するクラスを作成することです。「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

コードの重複を避けるために(これはほとんどの場合良いことです)、基本アクティビティクラスを作成し(作成しabstractます)、そこに共通のコードを配置します。次に、「実際の」アクティビティで基本クラスを拡張します。したがって、オプション「A」がその方法です。

于 2012-09-11T08:56:02.943 に答える