Android comment créer ma propre activité et l’étendre?

Je dois créer une classe de base qui étend l’ Activity qui effectue certaines tâches courantes dans mon application et en étendre mes activités , sous la forme suivante:

BaseActivity publique étend l’activité {….}

Public SubActivity étend BaseActivity {…}

Dans SubActivity, je dois donner des valeurs à certaines variables et composants d’interface utilisateur définis dans BaseActivity . Je devrai peut-être définir une disposition différente pour SubActivity en fonction de certaines valeurs d’ indicateur .

Est-ce possible? Si oui, existe-t-il un tutoriel qui pourrait aider? Merci d’avance

    Qu’est-ce que vous essayez de réaliser exactement? Avoir deux activités différentes avec une interface utilisateur commune, à l’exception de certaines variables ou parties de la mise en page?

    Dans ce cas, je suggère d’avoir une activité abstraite de base et deux sous-classes héritées concrètes. Vous définissez tout le comportement commun dans l’activité de base et disposez de méthodes abstraites pour les différences, que vous remplacez ensuite dans vos implémentations réelles.

    Par exemple, pour deux activités avec des ressources de mise en page différentes:

     public abstract class BaseActivity extends Activity { @Override public void onCreate(bundle) { super.onCreate(bundle); setContentView(getLayoutResourceId()); } protected abstract int getLayoutResourceId(); } public class Activity1 extends BaseActivity { @Override public void onCreate(bundle) { super.onCreate(bundle); // do extra stuff on your resources, using findViewById on your layout_for_activity1 } @Override protected int getLayoutResourceId() { return R.layout.layout_for_activity1; } } 

    Vous pouvez avoir beaucoup plus de méthodes abstraites, pour chaque bit que vous voulez spécifique à vos sous-classes.

    Faire cela est, à mon avis, beaucoup mieux que d’avoir une sous-classe concrète à une super-classe concrète: cela peut entraîner de nombreux problèmes et est généralement difficile à déboguer.

    Oui, vous pouvez simplement garder à l’esprit les règles d’inheritance de base. Vous allez hériter de l’activité AsyncTask interne et des propriétés définies dans BaseActivity si vous les protégez au lieu de privées. D’après ce que je vois maintenant, vous devriez faire de BaseActivity une classe abstraite, car seules les instances de subActivities seront réellement utilisées.

    Vous devriez juste commencer et l’essayer, cela viendra et travaillera plus facilement que vous ne le pensez. Si vous tombez sur des problèmes, demandez simplement.

    Cette question a déjà de très bonnes réponses.
    Toutefois. ma réponse est pour ceux qui cherchent un exemple de travail.
    Voici le travail complet -> CODE

    entrer la description de l'image ici
    Nous ne faisons rien de nouveau ici, c’est comme n’importe quel autre scénario d’inheritance (vous voulez un comportement commun à plusieurs endroits, mais vous ne voulez écrire ce comportement qu’une seule fois).

    AVANTAGE: Il fournit une meilleure lisibilité du code, la maintenabilité et bla bla.Mais ne sont pas après-ces, ils ne seront pas importants pour vous si votre cerveau fonctionne comme une gazelle.
    Nous recherchons le vrai pouvoir de l’inheritance «CONTROL» . (C’est ce qui se passe dans la vraie vie aussi. Parent contrôlant l’enfant :)).

    Dans mon exemple, j’ai deux activités MainActivity et OtherActivity. Les deux activités ont une disposition différente, mais je veux que les deux commencent par une animation ou un message de bienvenue.

    Notre première tâche est de découvrir le comportement commun. ici -> Démarrer l’activité avec l’animation.
    Nous avons trouvé la «chose» commune, maintenant nous allons écrire ce comportement dans BaseClass ( AnimationActivity ).
    MainActivity et OtherActivity hériteront d’AnimationActivity.

    Donc, le code ressemblerait à `

    BaseActivity

     AnimationActivity { startAnimation() { .... } } 

    Activités pour enfants

     MainActivity extends AnimationActivity{ } OtherActivity extends AnimationActivity{ } 

    Cette approche de conception offre beaucoup de contrôle et de flexibilité (POWER OF MODIFIER).

    1) CONTROL: Conservez la méthode d’animation dans onCreate () Lorsque vous décidez que les activités doivent être démarrées avec Animation. Conservez votre méthode dans la méthode onCreate (Bundle bundle). Maintenant, en modifiant simplement le modificateur, vous pouvez contrôler les activités enfants.
    Si vous conservez le modificateur comme
    final: Les activités des enfants commenceront par l’animation parent.
    résumé: Les activités des enfants devront donner leur propre animation.
    aucun modificateur: les activités enfant peuvent avoir leur propre animation en remplaçant la méthode d’animation, sinon l’enfant aura une animation parent.

    2) Flexibilité: ne conservez pas la méthode d’animation dans onCreate () Vous pouvez fournir une flexibilité aux activités enfants en ne conservant pas la méthode d’animation dans onCreate (bundle Bundle). Maintenant, les activités peuvent avoir la flexibilité d’avoir une animation parent ou leur propre animation ou pas d’animation du tout.
    J’espère que cela aide.
    Bon apprentissage

    `

    J’ai trouvé un moyen plus facile de trouver la solution @ Guillaume. Définissez ContentView une seule fois dans votre BaseActivity et ne le définissez pas dans les activités qui l’étendent:

     public abstract class BaseActivity extends Activity { @Override public void onCreate(bundle) { super.onCreate(bundle); setContentView(activity_main); } } public class Activity1 extends BaseActivity { @Override public void onCreate(bundle) { super.onCreate(bundle); // setContentView(activity_activity1) // Do NOT call this. } }