2017-08-09 2 views
2

Ich bin neu in Kotlin, ich möchte wissen, wie mehrere Klickereignisse zu Schaltflächen in XML definiert, wie zuvor in Java, implementieren wir View.onClickListener Schnittstelle und den Rest der Arbeit in OnClick-Methode. Beispiel ist dies:Kotlin mehrere Klickhörer auf Schaltflächen

@Override 
public void onClick(View v) { 

switch (v.getId()) { 

    case R.id.oneButton: 
     // do your code 
     break; 

    case R.id.twoButton: 
     // do your code 
     break; 

    case R.id.threeButton: 
     // do your code 
     break; 

    default: 
     break; 
    } 

} 

Ich bin ein grundlegenden Rechner App mit dem neuen Kotlin machen, aber es scheint Kotlin keine solche Bestimmungen hat, anstatt mein Code zu lange und ausführlichen sieht, wie ich Anbringen Ereignisse an alle bin Tasten einzeln. Kann mir jemand sagen, wie man in Kotlin genauso vorgeht? Dank

+0

Sie können versuchen, diesen Code zu Android Studio zu kopieren und sehen, was Sie erhalten. – BakaWaii

Antwort

0

allererst implementieren OnClickListener in Ihrem Activity, wie

class MainActivity : Activity , OnClickListener 

dann ihre Umsetzung außer Kraft setzen wie

public void onClick(View v) { 
    //use when here like 
    case R.id.youview -> { 
    // do your work on click of view 
    } 

nicht vergessen Sie setze clicklistener auf y unsere View.

yourView.setOnClickListener(this) 

Oder zum besseren Verständnis geht Schritt für Schritt -

  1. OnClickListenerActivity in Ihrer Implementierung.

  2. Der Compiler wird Sie auffordern, übergeordnete Methoden zu implementieren. Implementieren Sie diese.

  3. Kopieren Sie Ihren Java-Code, den Sie in onClick Methode geschrieben haben, die von Kotlin selbst konvertiert werden oder notieren Sie when Bedingungen.

+0

Danke, es funktioniert –

0

Ja, in Kotlin können Sie es wie folgt tun:

view.setOnClickListener(object : View.OnClickListener { 
    override fun onClick(v: View?) { 
     when(v.id) { 
      R.id.imgBack -> {/* do your code */} 
      R.id.twoButton -> {/* do your code */} 
      R.id.threeButton -> {/* do your code */} 
      else -> {/* do your code */} 
     } 
    } 
} 
+0

Ich habe versucht, aber das Ansichtsobjekt kann nicht in Button umgewandelt werden. Können Sie den vollständigen Code veröffentlichen, in dem das Ansichtsobjekt deklariert wurde? Danke –

+0

Bitte überprüfen Sie aktualisierte Antworten – Kharda

0

Versuchen unten so.

public class MainActivity extends Activity implements View.OnClickListener{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Button xyz = (Button) findViewById(R.id.xyz); 
     xyz.setOnClickListener(this); 
    } 
    @Override 
    public void onClick(View v) { 
    }} 

Detailliertere Informationen zu https://androidacademic.blogspot.in/2016/12/multiple-buttons-onclicklistener-android.html

+1

Frage Kotlin gefragt und Sie gaben die Antwort in Java. –

0

können Sie versuchen, diesen Code ein:

class Testing:AppCompatActivity(), View.OnClickListener { 
    private val mButton1:Button 
    private val mButton2:Button 
    protected fun onCreate(savedInstanceState:Bundle) { 
    super.onCreate(savedInstanceState) 
    setContentView(R.layout.activity_testing) 
    mButton1 = findViewById(R.id.btn_click) as Button 
    mButton2 = findViewById(R.id.btn_click1) as Button 
    mButton1.setOnClickListener(this) 
    mButton2.setOnClickListener(this) 
    } 
    fun onClick(view:View) { 
    when (view.getId()) { 
     R.id.btn_click -> { 
     Toast.makeText(this, "button 1", Toast.LENGTH_SHORT).show() 
     } 
     R.id.btn_click1 -> { 
     Toast.makeText(this, "button 2", Toast.LENGTH_SHORT).show() 
     } 
     else -> {} 
    } 
    } 
} 

Ich hoffe, das hilft dir.

0

Dieser Code für mich gearbeitet:

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    imgBack.setOnClickListener(this) 
    twoButton.setOnClickListener(this) 
    threeButton.setOnClickListener(this) 
} 

override fun onClick(view:View) { 
    when (view.id) { 
     R.id.imgBack -> { 
      Toast.makeText(this, "imgBack", Toast.LENGTH_SHORT).show() 
     } 
     R.id.twoButton -> { 
      Toast.makeText(this, "twoButton", Toast.LENGTH_SHORT).show() 
     } 
     else -> {} 
    } 
} 

nicht View.OnClickListener in Ihrer Klasse implementieren Vergessen Sie.

2

Für mehrere onClickListeners in (version:1.1.60), hat mir folgendes geholfen. Ich hoffe, es wird auch für jemand anderen nützlich sein.

Implementieren OnClickListener zu Aktivitäten wie:

class YourActivity : AppCompatActivity(), View.OnClickListener 

setzen Ihre Schaltfläche in onCreate():

val button = findViewById<Button>(R.id.buttonId) 

und weisen onclick auf die Schaltfläche in onCreate():

button.setOnClickListener { onClick(button) } 

und in der Überschreibung Methode von onClick():

override fun onClick(v: View?) { 
    when (v?.id) { 
     R.id.buttonId -> { //your code } 
     .. 
     .. 
     .. 
     else -> { //your code } 
    } 
} 
Verwandte Themen