2010-02-21 7 views
0

Besoin de conseils de vos experts là-bas. Je viens de commencer avec Android programmation et même si j'ai finalement obtenu ce que je veux faire de mon "Hello World", je me sens comme si je me frayais un chemin à travers plutôt que de saisir des concepts.Quelle est la meilleure façon de transmettre des ressources?

J'ai créé trois zones EditText. En dessous de ceux que j'ai créés trois Spinners. Choisissez un numéro dans le Spinner et il apparaîtra dans la zone EditText correspondante. Spinner 1 est corrélé à EditText 1, Spinner 2 à EditText 2 et Spinner 3 à EditText 3. J'ai eu un sacré bon moment pour que cela fonctionne. J'ai quelques nettoyage à faire.

Dans ma classe de démarrage I:

EditText [] pick_nums = new EditText[3]; 
    pick_nums[0] = (EditText) findViewById(R.id.r1c1); 
    pick_nums[1] = (EditText) findViewById(R.id.r1c2); 
    pick_nums[2] = (EditText) findViewById(R.id.r1c3); 

    Spinner test1 = (Spinner) findViewById(R.id.spin_pick_num1); 
    Spinner test2 = (Spinner) findViewById(R.id.spin_pick_num2); 
    Spinner test3 = (Spinner) findViewById(R.id.spin_pick_num3); 

// Je crée une classe pour initialiser les filateurs. // J'ai créé une classe pour mettre le nombre dans la zone EditText correspondante. Je voulais éviter que l'utilisateur appuie sur un bouton pour faire le remplissage et une fois que trois numéros sont dans je vais faire quelque chose avec eux sans avoir à appuyer sur un bouton.

Handle_Picks hp = new Handle_Picks(g, pick_nums); 

// Voici où je pense que ça devient kludgy et maladroit. Pour que Handle_Picks fonctionne correctement j'ai créé une méthode pour définir le contexte, un tableau de EditTexts, et la référence à la classe Handle_Picks hp.

Spinner_Listener listen = new Spinner_Listener();  
listen.set_context(g, pick_nums, hp); 
test1.setOnItemSelectedListener(listen); 
test2.setOnItemSelectedListener(listen); 
test3.setOnItemSelectedListener(listen); 

// Dans la classe Spinner_Listener

public class Spinner_Listener implements OnItemSelectedListener 

static Handle_Picks hp1; //set in a method 
private String num; 
String v; 
String spin_id; 
int vv; 

public void onItemSelected(AdapterView<?> parent, View view, int pos, 
     long id) 
{ 
    //To make this work I had to find the name of the spinner that was 
    //used so I could correlate it with the right EditText 

    vv = parent.getId(); 
    v = parent.getResources().getResourceName(vv); 
    spin_id = parent.getResources().getResourceEntryName(vv); 
    setNum(parent.getItemAtPosition(pos).toString()); 
} 

public void setNum(String s) 
{ 
    num = s; 
    hp1.handle_nums(spin_id, num); 
} 

// enfin en classe Handle_Picks I:

public class Handle_Picks extends Activity 
{ 
    static Context theContext; 
    EditText [] et; 
    String spin_num; 

// constructor 
Handle_Picks(Context f, EditText[] array) 
{ 
    theContext = f; 
    et = array; 
} 


public void handle_nums(String id, String aNumber) 
{ 
    spin_num = id; 
    if (spin_num.equalsIgnoreCase("spin_pick_num1")) 
     et[0].setText(aNumber); 
    else if (spin_num.equalsIgnoreCase("spin_pick_num2")) 
     et[1].setText(aNumber); 
    else if (spin_num.equalsIgnoreCase("spin_pick_num3")) 
     et[2].setText(aNumber); 
} 

Y at-il une meilleure façon de passer ou de ressources de référence autour de différentes classes? Doit passer le contexte et le tableau de EditText à la classe Handle_Picks avant de pouvoir utiliser Handle_Picks de la classe Spinner_Listener ne semble pas correct. Semble un peu dangereux.

Quelle est la meilleure façon?

Répondre

1

Ummmm ... eh bien ... très peu de ce que vous avez ici j'aime beaucoup. La lutte contre les choses faciles:

  • Pour obtenir la valeur d'un Spinner, appelez getSelectedItem(). Il n'y a aucun sens dans votre déconner avec les ressources pour remplir votre EditText basé sur la valeur Spinner. Dans la méthode onItemSelected() de votre Spinner_Listener, votre Spinner est connue comme parent (Spinner hérite de AdapterView et getSelectedItem() est une méthode sur AdapterView). N'appelez pas getApplicationContext(), en particulier pour les problèmes liés à l'interface utilisateur. Votre Activity est un Context - il suffit de l'utiliser.Ne jamais implémenter un constructeur sur un Activity (par exemple Handle_Picks)

  • Ne créez jamais une instance d'un Activity directement (par exemple, new Handle_Picks()).

Compte tenu de tout ce qui précède, vous ne devriez pas du tout Handle_Picks.

Questions connexes