2017-05-21 2 views
0
public class SecondClass extends AppCompatActivity{ 

public void randomizareImagini(){ 

    int[] rndInt = new int[20]; 
    int[] id= new int[20]; 
    String[] imgName = new String[20]; 
    Random rand = new Random(); 
    int[] ar1 = new int[20]; 

    for (int i=1; i<16;i++){ 
     ar1[i] = rand.nextInt(3) + 1; 
     rndInt[i]=ar1[i]; 
     imgName[i]="img"+rndInt[i]; 
     id[i] = getResources().getIdentifier(imgName[i], "drawable", getPackageName()); 
    } 

    for (int i=0;i<15;i++){MainActivity.list.get(i).setImageResource(id[i+1]);} 

} 
} 

Comment appeler cette méthode dans MainActivity (je ne trouve pas parce est un non-statique)? Si je le rend statique, le code à l'intérieur ne fonctionnera pas avec couse de getResources() (il DOIT être non-statique). Où est-ce que je me trompe? Que puis-je faire?Comment appeler une méthode non statique dans MainActivity à partir de SecondActivity?

+0

chose est; L'utilisation de données non statiques réinitialise les données lorsqu'une intention est appelée MainActivity ou qu'une nouvelle instance est créée. – Zoe

+0

Et que puis-je faire? –

+0

Utilisez des méthodes et des références statiques si vous souhaitez conserver les données dans l'activité cible même si une intention s'y rapporte – Zoe

Répondre

1

Utilisez cette méthode dans une classe séparée

changer la méthode statique et le paramètre ajouter un paramètre

public static void randomizareImagini (contexte Contexte)

Après cela changer cette ligne

id [i] = contexte.getResources(). GetIdentifier (imgName [i], "drawable", context.getPackageName());

public class SeparateClass { 
    public static void randomizareImagini(Context context){ 

     int[] rndInt = new int[20]; 
     int[] id= new int[20]; 
     String[] imgName = new String[20]; 
     Random rand = new Random(); 
     int[] ar1 = new int[20]; 

     for (int i=1; i<16;i++){ 
      ar1[i] = rand.nextInt(3) + 1; 
      rndInt[i]=ar1[i]; 
      imgName[i]="img"+rndInt[i]; 
      id[i] = context.getResources().getIdentifier(imgName[i], "drawable", context.getPackageName()); 
     } 

     for (int i=0;i<15;i++){ 
      MainActivity.list.get(i).setImageResource(id[i+1]);} 

    } 
} 

Vous pouvez appeler cette méthode en utilisant

SeparateClass.randomizareImagini (this);

+0

Comment puis-je appeler cela dans ma MainActivity? SeparateClass.randomizareImagini (quels paramètres dois-je écrire?); –

+0

Si vous appelez depuis MainActivity randomizareImagini (MainActivity.this); Si vous appelez à partir de SecondActivity randomizareImagini (SecondActivity.this); –

+1

Ça marche très bien. Je vous remercie! –

0

Techniquement, si vous voulez appeler une méthode non statique, vous avez besoin d'une instance de cette classe.

SecondClass instance = new SecondClass(); 
instance.randomizareImagini(); 
+1

Ne créez jamais de classe d'activité' new'. Ceci est la mauvaise solution pour les problèmes spécifiques à Android, seulement correct pour les objets Java simples –

+0

@ cricket_007 Oh d'accord. Je n'ai aucune idée d'Android. Merci pour l'information. – Marteng

+0

SecondClass n'est pas une activité. J'utilise comme une classe normale pour le calcul des choses. Donc, je peux utiliser de nouvelles, non? –