- Utiliser des variables globales
Si vous ne voulez pas gâcher votre code avec un simple Intent.putExtra()
des appels et de gérer ce genre de choses uniques à chaque Activity
vous aurez à utiliser des variables globales au sein de l'application. Étendre Application
et de stocker des données que vous avez besoin aussi longtemps que votre application est en vie. Pour la mise en œuvre, l'utilisation de cette excellente réponse. Cela rendra les dépendances entre les activités de disparaître. Par exemple, disons que vous avez besoin d'un "nom d'utilisateur" pour votre application lors de l'application du cycle de vie - c'est un excellent outil pour cela. Pas besoin de sale Intent.putExtra()
des appels.
Une erreur courante lors de la prise de la première application Android, c'est que c'est une habitude de commencer à écrire les vues XML. Les fichiers XML (sans problème et très rapide), aller jusqu'à de très nombreuses lignes de code. Ici vous pouvez avoir une solution où il vous suffit d'utiliser l' style
de l'attribut pour implémenter un comportement spécifique. Considérons par exemple ce morceau de code:
values/styles.xml:
<style name="TitleText">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:textSize">18sp</item>
<item name="android:textColor">#000</item>
<item name="android:textStyle">bold</item>
</style>
layout/main.xml:
Maintenant, si vous avez, disons, deux TextView
s et tous les deux doivent avoir le même comportement, à leur faire utiliser l' TitleText
style. Exemple de code:
<!--- ... -->
<TextView
android:id="@+id/textview_one"
style="@style/TitleText"
/>
<TextView
android:id="@+id/textview_two"
style="@style/TitleText"
/>
<!--- ... -->
Simple et vous n'avez pas besoin de dupliquer le code. Si vous voulez vraiment chercher plus loin sur ce sujet, veuillez jeter un oeil à la Disposition des Astuces: Création d'Réutilisables Composants de l'INTERFACE utilisateur.
Ce point est courte, mais je pense que c'est important de le mentionner. Une autre erreur que les développeurs peuvent faire est de l'ignorer strings.xml et il suffit d'écrire l'INTERFACE utilisateur messages (et les noms d'attribut) à l'intérieur du code (où il en aura besoin). Pour rendre votre application plus facile à maintenir; il suffit de définir les messages et les attributs dans le strings.xml fichier.
- Créer et utiliser un outil global de la classe
Quand j'ai écrit ma première application que je viens d'écrire (et dupliqué) méthodes où j'en avais besoin. Le résultat? Un grand nombre de méthodes qui ont le même comportement entre les différentes activités. Ce que j'ai appris, c'est d'en faire un outil de classe. Par exemple, disons que vous avez à faire des requêtes web dans toutes vos activités. Dans ce cas, ignorez les définissant dans l' Activity
et de faire une méthode statique. Exemple de code:
public final class Tools {
private Tools() {
}
public static final void sendData(String url,
String user, String pass) {
// URLConnections, HttpClients, etc...
}
}
Maintenant, vous pouvez simplement utiliser ce code ci-dessous dans votre Activity
qui a besoin d'envoyer des données vers un serveur:
Tools.sendData("www.www.www", "user", "pass");
Toutefois, vous obtenez le point. L'utilisation de ce "modèle" où vous en avez besoin, il va vous empêcher de perturber le fonctionnement de votre code.
- Laissez classes personnalisées définir le comportement où l'utilisateur doit interagir avec votre application
C'est probablement le plus utile. Pour définir simplement "où l'utilisateur doit interagir avec votre application" disons que vous avez un Menu
, dont le comportement est très long en termes de lignes, pourquoi continuons-nous à l' Menu
'des calculs dans la même classe? Chaque petit élément fera de votre Activity
de la classe d'un douloureux morceau de code plus votre code "spaghetti". Par exemple, au lieu d'avoir quelque chose comme ceci:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem item;
item = menu.findItem(R.id.menu_id_one);
if (aBooleanVariable) {
item.setEnabled(true);
} else {
item.setEnabled(false);
}
// More code...
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem i) {
// Code, calculations...
// ...
// ...
return super.onOptionsItemSelected(i);
}
refaire quelque chose comme ceci:
private MyCustomMenuInstance mMenuInstance;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mMenuInstance = new MyCustomMenuInstance();
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
mMenuInstance.onPrepareOptionsMenu(menu);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem i) {
mMenuInstance.onOptionsItemSelected(i);
return super.onOptionsItemSelected(i);
}
Par exemple, MyCustomMenuInstance
:
public class MyCustomMenuInstance {
// Member fields..
public MyCustomMenuInstance() {
// Init stuff.
}
public void onPrepareOptionsMenu(Menu menu) {
// Do things..
// Maybe you want to modify a variable in the Activity
// class? Well, pass an instance as an argument and create
// a method for it in your Activity class.
}
public void onOptionsItemSelected(MenuItem i) {
// Do things..
// Maybe you want to modify a variable in the Activity
// class? Well, pass an instance as an argument and create
// a method for it in your Activity class.
}
}
Vous voyez où cela va. Vous pouvez l'appliquer à beaucoup de choses, par exemple, onClick
, onClickListener
, onCreateOptionsMenu
, la liste est longue. Pour en savoir plus "les meilleures pratiques", vous pouvez voir quelques exemples d'applications à partir de Google ici. Comparer la façon dont ils ont mis en œuvre les choses dans une belle et bonne façon.
Dernier mot; garder votre code propre, le nom de vos variables et de méthodes d'une manière logique et surtout une façon correcte. Toujours, toujours à comprendre où vous en êtes dans votre code, c'est très important.