2010-11-24 11 views
1

J'essaie d'écrire une activité qui a des vues, une méthode fillView() qui définit les vues (qui n'est pas statique car elle doit utiliser getContentResolver), et une statique méthode qui effectue un choix aléatoire à partir d'un curseur, puis exécute la méthode fillView().Un autre "Impossible de créer une référence statique ..." Question

J'ai eu des problèmes avec fillView étant pas statique et pickRandom étant statique, donc j'ai essayé d'initialiser une instance de la classe, mais maintenant il se bloque sur la ligne instance.fillView();

Exemple de code ci-dessous. Toute aide serait appréciée. Il y a peut-être un moyen beaucoup plus facile d'accomplir ce que j'essaie de faire.

Merci, Josh

public class myView extends Activity implements OnClickListener { 


@Override 
    public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 

    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.myView); 

fillView(); 

    } 


public void fillView(){ 

    //creates views, runs cursor and applies results to the view created 

} 

public static void pickRandom() { 


      // runs cursor, picks random entry, next I want to apply the result to 
      // view, so I run... 

     myView v = new myView(); 
     v.fillView(); 

     } 
+0

est 'getContentResolver()' statique ?, Je ne vois pas de méthodes statiques ici. –

+0

pickRandom() est statique et ne me permet pas d'utiliser fillView() à l'intérieur. – Josh

+0

d'où mon ajout de l'instance «myView v», mais cela provoque un plantage – Josh

Répondre

5

Faire une variable d'instance statique et définie dans dans oncreate:

private static myView instance; 

oncreate()

instance = this; 

pickrandom statique()

instance.fillView(); 
+0

Toujours plantage sur le instance.fillView(); bit. – Josh

+0

Pris une autre partie qui causait l'erreur et cela fonctionne bien maintenant. – Josh

+0

Merci pour votre aide! StackOverlfow arrive à nouveau. – Josh

0

Dans votre sélectionRandom, vous essayez de créer une nouvelle instance de votre classe. Au lieu de cela, vous devriez faire ce qui suit:

this.fillView(); 

Je ne vois aucune raison que vous ayez votre statique pickRandom.

Cependant, si vous en avez besoin pour une raison quelconque, vous pouvez passer une référence à votre point de vue comme celui-ci:

public static void pickRandom(myView v) { 


    // runs cursor, picks random entry, next I want to apply the result to 
    // view, so I run... 

    v.fillView(); 

} 
+0

Cela est difficile parce que j'utilise la méthode pickRandom dans d'autres activités, et que les vues ne sont pas toujours disponibles. Si j'essaie this.fillView(); il me dit "Impossible de l'utiliser dans un contexte statique" – Josh