2017-06-15 8 views
0

Ich mache eine App, die 81 Tasten auf dem gleichen Layout enthalten wird. Sie werden alle als ein Objekt bezeichnet, das ich "Tile" genannt habe. Problem ist, dass diese Kacheln in einem Array gespeichert sind, also muss ich wissen, auf welche Schaltfläche in einem int-Format geklickt wurde, um eine Kachel aufrufen zu können (tiles[??]). Ich verwende eine onClick(View v) Methode. Auch ich habe es versucht:Wissen, welche Taste in Android geklickt wurde

Das Ergebnis, das es mir im Logcat gab, war eine wirklich lange Ganzzahl.

Woher weiß ich, welche Taste in einem Zahlenformat angeklickt wurde? Und was ist die Beziehung zwischen der zufälligen ID (R.id.tile1) und dieser langen Ganzzahl, da es helfen könnte, weil es bereits eine Nummer ist?

PS: Ich weiß, ich könnte Switch verwenden, um jede ID einer ganzen Zahl zuzuweisen, aber da sie 81 sind, wird es eine Verschwendung von Zeit sein und wird den Code sehr kompliziert machen.

+0

Warum verwenden Sie nicht die Position, um festzustellen, welche Schaltfläche klicken? –

+0

Ich habe nicht verstanden, können Sie bitte mehr Details geben. Danke;) –

+0

Sie verwenden Klick Listener wie: Kacheln [i] .setOnClickListener (this); Recht? –

Antwort

3

Ich hoffe, Sie können Tag Option verwenden. Sie können das Tag für eine Ansicht durch view.setTag (1) festlegen, und dann auf click-Ereignis können Sie das Tag-Set mit view.getTag() abrufen.

+0

Vielen Dank. Gibt es eine Möglichkeit, nach Tags zu suchen? –

+0

Ich habe dich nicht verstanden, view.getTag() funktioniert, oder? – SAJ

+0

Ja, es funktioniert richtig. Aber genauso, wie wir uns auf ein Objekt anhand seiner ID beziehen, gibt es eine Möglichkeit, sich auf dieses Objekt zu beziehen? –

0

In Android können wir die ID der Schaltfläche verwenden, um das Click-Ereignis in Click Listener zu erhalten.
Angenommen, Sie haben, 5 Buttons: Achten Sie darauf, Ihre Aktivität/Fragment implementieren OnClickListener

// in OnCreate

Button mClickButton1 = (Button)findViewById(R.id.clickButton1); 
    mClickButton1.setOnClickListener(this); 
    Button mClickButton2 = (Button)findViewById(R.id.clickButton2); 
    mClickButton2.setOnClickListener(this); 
    Button mClickButton3 = (Button)findViewById(R.id.clickButton3); 
    mClickButton3.setOnClickListener(this); 
    Button mClickButton4 = (Button)findViewById(R.id.clickButton4); 
    mClickButton4.setOnClickListener(this); 
    Button mClickButton5 = (Button)findViewById(R.id.clickButton5); 
    mClickButton5.setOnClickListener(this);</br> 

// danach werden Sie die Methode OnClick von OnClickListener außer Kraft setzen

public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.clickButton1: { 
     // do something for button 1 click 
     break; 
     } 
     case R.id.clickButton2: { 
     // do something for button 2 click 
     break; 
     } 

    //.... etc 
    } 
} 
+0

Dies beinhaltet das Schreiben eines 'switch', der 81 Fälle enthält –

+0

Ja, Wenn Sie 81 Knopf haben, dann müssen Sie 81 Fälle dafür schreiben. –

+0

Der ganze Zweck der Frage besteht darin, einen Weg zu finden, 81 Wiederholungen zu vermeiden. –

0

Sie können button.setTag (position) verwenden, um die Position als Tag festzulegen.

Und wenn Onclick aufgerufen bekommen, dass Tag-Wert.

public void onclick(View v){ 
    int position = Integer.parseInt(v.getTag().toString()); 
} 
Verwandte Themen