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

J'ai besoin de créer une classe de base qui étend l' Activity qui effectue certaines tâches courantes dans ma demande et en étendre mes activités , sous la forme suivante:

Public BaseActivity extends Activity {….}

  • Uncaught TypeError: Object # <Object> n'a pas de méthode 'exec' dans le fichier: ///android_asset/www/index.html
  • Utilisation de Gson et Retrofit 2 pour désérialiser des réponses API complexes
  • Android - Lors de la transition entre deux activités, l'ordre d'appel des méthodes de cycle de vie de l'activité
  • Existe-t-il un moyen d'obtenir le nom du processus actuel dans Android
  • Comment attendre plusieurs appels asynchrones imbriqués en utilisant RxJava-Android?
  • Appeler une caméra d'une activité, capturer une image et télécharger sur un serveur
  • Public SubActivity extends BaseActivity {…}

    En SubActivité, j'ai besoin de donner des valeurs à certaines variables et aux composants UI définis dans BaseActivity , il me faudra peut-être définir une disposition différente pour SubActivity selon une valeur de drapeau, aussi (dans SubActivity ), je souhaite exécuter asyncTask qui est défini dans BaseActivity .

    Est-ce possible? Si oui, y at-il un tutoriel qui pourrait vous aider? Merci d'avance

    4 Solutions collect form web for “Android comment créer ma propre activité et l'étendre?”

    Qu'est-ce que vous essayez d'atteindre exactement? Avoir deux activités différentes avec un ui commun, à 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 avez ensuite annulées dans vos implémentations réelles.

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

     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.

    Cela étant, à mon avis, beaucoup mieux que d'avoir une sous-classe concrète dans une superclasse 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'héritage de base. Vous hériterez de l'activité AsyncTask interne et des propriétés définies dans BaseActivity si vous les protégez plutôt que privé. D'après ce que je vois maintenant, je pense que vous devriez faire de BaseActivity une classe abstraite, car seuls les exemples de sous-activités seront réellement utilisés.

    Vous devriez commencer et essayer, cela viendra et fonctionnera plus facilement que vous ne le pensez. Si vous vous trouvez sur des problèmes, demandez simplement.

    J'ai trouvé un moyen plus simple pour la solution @ Guillaume. Définissez ContentView uniquement une fois dans votre BaseActivity et ne le configurez 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. } } 

    Cette question a déjà de très bonnes réponses.
    Ma réponse est pour les personnes qui recherchent un exemple de travail.
    Voici le plein travail -> CODE

    Entrez la description de l'image ici
    Nous ne faisons rien de nouveau ici, c'est comme tout autre scénario d'héritage (Vous voulez un comportement commun à plusieurs endroits, mais ce comportement que vous écrivez à un endroit).

    AVANTAGE: Il offre une meilleure lisibilité du code, une facilité de maintien et blah blah. Mais ne sont pas après cette possibilité, ils ne vous importeront pas si votre cerveau fonctionne comme une gazelle.
    Nous sommes après le véritable pouvoir de l'héritage "CONTROL" . (C'est ce qui se passe dans la vie réelle 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 -> Activité de début avec animation.
    Nous avons trouvé la «chose» commune, nous écrirons maintenant ce comportement dans BaseClass ( AnimationActivity ).
    MainActivity et OtherActivity hériteront de ActivityActivitys.

    Donc, le code ressemblerait à `

    Activité de base

     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) CONTRÔLE: maintenez la méthode d'animation à l'intérieur de la date de création () Lorsque vous décidez que les activités doivent être démarrées avec l'animation. Gardez votre méthode à l'intérieur de la méthode Create (Bundle bundle). Maintenant, en modifiant le modificateur, vous pouvez contrôler les activités de l'enfant.
    Si vous maintenez le modificateur comme
    Finale: les activités pour enfants commenceront avec l'animation parentale.
    Résumé: Les activités de l'enfant devront donner leur propre animation.
    Nomodificateur: les activités pour enfants peuvent avoir leur propre animation en remplissant la méthode d'animation, sinon l'enfant aura une animation parentale.

    2) Flexibilité: Ne continuez pas la méthode d'animation à l'intérieur de la Création () Vous pouvez fournir une flexibilité de l'activité enfant en ne conservant pas la méthode d'animation à l'intérieur sur Recréer (Bundle bundle). Maintenant, les activités peuvent avoir la flexibilité d'avoir une animation parentale ou leur propre animation ou pas d'animation du tout.
    J'espère que cela aide.
    Bon apprentissage.

    `

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.