2016-08-03 38 views
0

Dieser Code ist unter dem OnClick-Listener und auch unter der Methode erstellen, und Zeit, ich klicke auf die TextView oder lädt die Seite es stoppt zu laufen und zu schreiben Leider wurde appName beendet.Ich möchte auf eine Textansicht klicken, um meine Schaltfläche durch Java in Android zu inkrementieren

for (int i = 0 ; i < MAX_BUTTONS; i++){ 
     Button button = (Button) getLayoutInflater().inflate(R.layout.button_layout,buttonsContainer,false); 
     button.setText("Test" + i); 
     button.setOnClickListener((View.OnClickListener) this); 
     buttonsContainer.addView(button); 

     if (i != MAX_BUTTONS - i){ 
      buttonsContainer.addView(new Space(this),new ViewGroup.MarginLayoutParams(buttonsSpacing,buttonSize)); 
     } 

    } 

Antwort

0

Ich denke, es ist wegen Ihrer Besetzung in SetOnClickListener. Verwenden Sie einfach "this" als Parameter. Wenn Ihre Klasse den Listener implementiert, ist kein Casting notwendig. Beachten Sie außerdem, dass Sie unnötigen Objektabfall erstellen, indem Sie getLayoutInflater in einer Schleife aufrufen. Alles, was Sie tun müssen, ist, es einmal außerhalb der Schleife aufzurufen und dessen Referenz zu verwenden. Auf diese Weise erstellen Sie nicht nur n + Objekte, sondern erstellen auch nur eins. Schließlich sehe ich, dass Sie anrufen

if(i != MAX_BUTTONS - i) 

hast du nicht meine

if(i != MAX_BUTTONS - 1) 
+0

Danke, es hat endlich funktioniert – Akanni

+0

Wenn ich dir geholfen habe, bitte mag und vote beste Antwort für mich :) du bist willkommen btw –

0

Es sieht aus wie Sie eine neue Schaltfläche jeder Iteration der Schleife-Objekt erstellen müssen, anstatt ein Layout aufbläst, zum Beispiel

for (int i = 0 ; i < MAX_BUTTONS; i++){ 
     Button button = new Button(this); 
     button.setText("Test" + i); 
     button.setOnClickListener((View.OnClickListener) this); 
     buttonsContainer.addView(button); 

     if (i != MAX_BUTTONS - i){ 
      buttonsContainer.addView(new Space(this),new ViewGroup.MarginLayoutParams(buttonsSpacing,buttonSize)); 
     } 

    } 

Da Sie die Taste programmatisch möchten erstellen Sie this Antwort für die Erstellung von LayoutParams überprüfen.

EDIT: Ich wollte erwähnen, ich stimme mit Bryan Mills Antwort in Bezug auf Sie überein, wenn Ihre Aktivität View.OnClickListener Sie können Ihren Listener nur durch die Übergabe des Kontexts zum Beispiel button.setOnClickListener (this), sowie du solltest vielleicht schreiben, wenn (i! = MAX_BUTTONS - 1) statt -i.

+0

es hat funktioniert, danke – Akanni