69 votes

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

j'ai besoin de créer une classe de base qui s'étend de l'activité qui n'certaines tâches courantes dans mon application et d'étendre mes activités,sous la forme suivante:

public BaseActivity s'étend de l'Activité{....}

public Activité s'étend BaseActivity{...}

en Activité j'ai besoin de donner de la valeur à certaines variables et les composants de l'INTERFACE utilisateur défini dans BaseActivity, j'ai peut-être besoin de définir une mise en page différente pour la sous-Activité selon certaines valeur de l'indicateur, aussi(en Activité ) je veux exécuter asyncTask qui est définie dans BaseActivity.

est-ce possible? si oui, est-il un tutoriel qui peut vous aider? je vous remercie à l'avance

138voto

Guillaume Points 10121

Qu'est-ce exactement que vous souhaitez atteindre? Ayant deux activités différentes avec une interface utilisateur commune, sauf pour certaines variables, ou des parties de la mise en page?

Dans ce cas, je suggère d'avoir une base abstraite de l'activité, et deux sous-classes héritées. Vous définissez toutes les communes de comportement dans les activités de base, et ont des méthodes abstraites pour les différences, qui vous remplacer dans votre implémentations réelles.

Par exemple, pour deux activités à disposition différentes ressources:

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 abstrait des méthodes, pour chaque bit vous voulez spécifiques à votre sous-classes.

Cela est, à mon avis, beaucoup mieux que d'avoir un béton sous-classe concrète de la superclasse: qui peut conduire à de nombreux problèmes et est généralement difficile à déboguer.

5voto

J. Maes Points 2561

Oui, vous devez garder à l’esprit les règles de base en matière d’héritage. Vous hériterez de l'activité AsyncTask interne et des propriétés définies dans BaseActivity si vous les protégez au lieu de les protéger. D'après ce que je vois maintenant, je pense que 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, ça va venir travailler plus facilement que vous ne le pensez. Si vous tombez sur un problème, demandez simplement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X