2012-05-18 13 views
11

私は自分自身の基本抽象クラスを持っていて、Activityクラスを拡張しています。マニフェストに基本アクティビティクラスを登録する必要はありませんか?

public abstract class BaseActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(getLayoutResourceId()); 
    } 

    protected abstract int getLayoutResourceId(); 
} 

public class Activity1 extends BaseActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // do extra stuff 
    } 

    @Override 
    protected int getLayoutResourceId() { 
     return R.layout.layout_for_activity1; 
    } 
} 

私の基底クラスBaseActivityManifestファイルに登録されていないと私はすべてのエラーを得ることはありません。

これは時限爆弾(マニフェストの基本クラスを登録していない)ですか、それともそうでなければなりませんか?なぜ誰かが説明できますか?

答えて

15

ドキュメントによれば、マニフェストに<activity>

は アプリケーションの視覚的なユーザインタフェースの一部を実現するアクティビティ(活動サブクラス)を宣言します。すべてのアクティビティは、マニフェストファイル内の要素によって表される である必要があります。 がシステムによって認識されませんと 実行になることはありません宣言されていない される任意の。

はこのようにそれについて考える:あなたはあなたのアプリケーションの中でいくつかの点でにナビゲートしますアクティビティ(Activityまたはそれを拡張するクラスを拡張するすべてのクラスが)がある場合、それはマニフェストで宣言する必要があります。どのようにあなたはその活動に達するに関係なく。これにより、Activityクラスだけを拡張するクラスは除外されますが、直接アクセスすることはできません。

Source

+0

あなたの答えはちょっと誤解を招いています。あなたは、マニフェストにBaseActivityを登録しないように、時の爆弾を言うが、まだ登録しないと言って続ける。 – dymmeh

+0

心配はありません。明確にしていただきありがとう:) – dymmeh

10

あなたあなたが意図して呼び出すのではない1が起動するので、マニフェストにBaseActivityクラスを登録するにはいけない必要。例えば

:上記のコードで

Intent i = new Intent(context, Activity1.class); 
startActivity(i); 

、あなたは意志でそれを言及しているので、Activity1活動はマニフェストに登録されている必要があり、ないBaseActivityクラス。

+1

^これ。実際にBaseActivityを単独で実行する予定がない限り、それを拡張しているアクティビティを登録する必要があります。 – dymmeh

+0

もちろん、論理的には*具体的なクラスを登録する必要があります。 – waqaslam

+0

投票の理由は何ですか? – waqaslam

関連する問題