2012-05-18 28 views
11

Activity sınıfını genişleten kendi temel soyut sınıfım var.Manifest'te temel Etkinlik sınıfını kaydettirmeye gerek yok mu?

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

My taban sınıfı BaseActivityManifest dosyasında kayıtlı değil ve herhangi bir hata alamadım.

Bu bir saatli bomba mı (Manifest'te taban sınıfını kaydettirmiyor) ya da olması gerektiği gibi mi? Birisi nedenini açıklayabilir mi?

cevap

15

dokümanlar, gümrük bildirgesinde <activity> göre:

uygulamanın bir görsel kullanıcı arayüzü bir kısmını uygulayan bir aktiviteye (bir faaliyet alt sınıfı) bildirir. Tüm aktiviteler, bildirim dosyasındaki öğelerle temsil edilen olmalıdır. bildirilmedi olduklarını Herhangi sistem tarafından görülmez orada ve çalıştırmak olmayacak.

böyle Bir düşünün: bir faaliyet (Activity genişleten herhangi bir sınıf veya genişleten bir sınıf) uygulamanızda bir noktada, bu manifest'te beyan edilmesi gerekiyor nereye taşınacak varsa. 'dan bağımsız olarak bu aktiviteye ulaşırsınız. Bu, yalnızca Activity sınıfını genişleten sınıfları hariç tutar ancak doğrudan erişemezsiniz.

Source

+0

Cevabınız yanıltıcıdır. Onun tabirinde BaseActivity'i kaydetmemesi için bir zaman dilimi olduğunu söylüyorsunuz, ama yine de kayıt yaptırmamanız gerektiğini söyleyin. – dymmeh

+0

Endişeye gerek yok. Açıklama için teşekkürler :) – dymmeh

10

Sen Eğer niyet aramak onun değil bir başlatmak için çünkü Manifest'inizde BaseActivity sınıfı kaydetmek için do not gerek. örneğin

:

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

Yukarıdaki kodda, değilBaseActivity sınıf, sen niyet bahsetmesi çünkü Activity1 etkinlik tezahür kayıtlı olması gerekir.

+1

^This. Tabii ki, BaseActivity'i kendi başına çalıştırmayı planlamazsanız, sadece onu genişleten Faaliyetleri kaydetmeniz gerekir. – dymmeh

+0

evet, tabiki ... mantıksal * beton * sınıfları kaydedilmelidir. – waqaslam

+0

Aşağı oylama için herhangi bir sebep var mı? – waqaslam