12

クラスを拡張する独自の基本抽象クラスがあります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ファイルに登録されておらず、エラーは発生しません。

これは時限爆弾(マニフェストに基本クラスを登録しない)ですか、それともこうあるべきですか?誰かが理由を説明できますか?

4

3 に答える 3

17

マニフェストにBaseActivityクラスを登録する必要はありません。これは、起動するために呼び出すクラスではないためです。

例えば:

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

上記のコードでは、クラスではなくActivity1インテントで言及しているため、アクティビティをマニフェストに登録する必要があります。BaseActivity

于 2012-05-18T13:08:57.833 に答える
16

ドキュメントによると<activity>、マニフェストの:

アプリケーションのビジュアル ユーザー インターフェイスの一部を実装するアクティビティ (Activity サブクラス) を宣言します。すべてのアクティビティは、マニフェスト ファイル内の要素で表す必要があります。そこで宣言されていないものは、システムから認識されず、決して実行 れません。

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

ソース

于 2012-05-18T13:07:38.857 に答える