Je rencontre des problèmes avec l'ancienne erreur "Impossible de faire une référence statique à une méthode non statique" dans mon programme Android. Je crée un jeu de chute de sable (similaire au jeu Powder) et j'ai créé une classe appelée Control pour créer une barre de contrôle au bas de l'écran avec un curseur pour la taille du pinceau (qui fonctionne bien) et un bouton pour faire apparaître Dialogue pour permettre aux utilisateurs de choisir l'élément sélectionné. Cependant, lorsque j'appelle DemoActivity.showDialog (2) à partir de mon code, il donne la référence statique à l'erreur non statique (DemoActivity est l'activité principale de mon application). J'ai aussi essayé de le changer en Activity.showDialog (2), mais j'ai eu exactement la même erreur! S'il vous plaît, aidez, qu'est-ce que je fais de mal? Voici mon code et merci à l'avance:"Impossible de faire une référence statique à une méthode non statique" dans Android
package sand.falling.opengl;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.SeekBar;
public class Control extends LinearLayout
{
private ImageButton control_button;
private SeekBar brush_size_slider;
final CharSequence[] elementslist = {"Sand", "Water", "Plant", "Wall", "Fire", "Ice", "Generator", "Oil", "Magma", "Stone", "C4"};
public Control(Context context, AttributeSet attrs)
{
super(context, attrs);
}
@Override
protected void onFinishInflate()
{
control_button = (ImageButton) findViewById(R.id.element_picker_button);
brush_size_slider = (SeekBar) findViewById(R.id.brush_size_slider);
control_button.setOnClickListener
(
new OnClickListener()
{
public void onClick(View v)
{
//THIS DOESN'T WORK!!!!
DemoActivity.showDialog(2); //Run the element picker dialog
}
}
);
control_button.setImageResource(R.drawable.palette);
brush_size_slider.setOnSeekBarChangeListener
(
new SeekBar.OnSeekBarChangeListener()
{
public void onProgressChanged(SeekBar seekbar, int progress, boolean fromTouch)
{
int p = 32 * progress/100;
DemoActivity.setBrushSize(p);
Log.v("DemoActivity", "size:" + p);
}
public void onStartTrackingTouch(SeekBar seekbar) {}
public void onStopTrackingTouch(SeekBar seekbar) {}
}
);
brush_size_slider.setProgress((int)400/32);
}
}
EDIT: Je l'ai fixé en ajoutant ce qui suit à mon code Control.java:
public class Control extends LinearLayout
{
private DemoActivity activity;
...
public void setActivity(DemoActivity act)
{
activity = act;
}
...
//Set a click listener for the button which should pop up element picker dialog when clicked
control_button.setOnClickListener
(
new OnClickListener()
{
public void onClick(View v)
{
activity.showDialog(2); //Run the element picker dialog
}
}
);
}
Et puis appeler control.setActivity(this);
de ma section onResume de DemoActivity.java ! J'espère que cela aidera ceux d'entre vous qui ont des problèmes similaires !!
Ah, je crois que je comprends. Comment pourrais-je obtenir une référence à une instance spécifique de la classe DemoActvity? AFAIK, je n'en crée pas moi-même, Android le fait automatiquement lorsque l'utilisateur lance mon application, alors comment le référencer? Merci pour la réponse rapide btw! – gkanwar
Hmm, pas sûr, je n'ai pas encore fait de développement Android. Je vais jeter un oeil à la documentation de DemoActivity. Est-ce que DemoActivity a une méthode 'instance()' ou 'getInstance()'? Si oui, cela pourrait être ce dont vous avez besoin. –
Eh bien, DemoActivity est une classe que j'ai créée qui étend la classe d'activité générale contenue dans le code Android de base. J'ai regardé la documentation de l'activité dans Android, et il y a une fonction appelée getInstanceCount(), mais rien de tel que instance() ou getInstance(). – gkanwar