2017-08-09 1 views
2

donc je suis nouveau à kotlin, je veux savoir comment ajouter plusieurs événements de clic aux boutons définis dans xml, comme précédemment dans Java, nous implémentons l'interface View.onClickListener et faisons le reste du travail Méthode onClick exemple est le suivant:kotlin cliquez sur écouteurs multiples sur les boutons

@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; 
    } 

} 

Je fais une application calculatrice de base avec la nouvelle Kotlin mais il semble Kotlin n'a pas de telles dispositions, au lieu mon code semble trop long et bavard, comme je suis à tous les événements attachés boutons individuellement. Quelqu'un peut-il me dire comment faire de même à Kotlin? Merci

+0

Vous pouvez essayer de copier ce code dans Android Studio et voir ce que vous obtenez. – BakaWaii

Répondre

0

tout d'abord mettre en œuvre OnClickListener dans votre Activity, comme

class MainActivity : Activity , OnClickListener 

puis passer outre sa mise en œuvre comme

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

Ne pas oublié de définir clicklistener sur y notre View.

yourView.setOnClickListener(this) 

Ou pour une meilleure compréhension aller étape par étape -

  1. Mettre en oeuvre OnClickListener dans votre Activity.

  2. Le compilateur vous demandera d'implémenter des méthodes substituées. Implémentez-les. Copiez le code java que vous avez écrit à l'intérieur de la méthode onClick, qui peut être converti par kotlin lui-même ou écris les conditions when.

+0

Merci, ça marche –

0

Oui, Kotlin vous pouvez le faire comme ceci:

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

J'ai essayé mais l'objet vue ne peut pas être converti en bouton. Pouvez-vous poster le code complet où l'objet de vue a été déclaré? Merci –

+0

s'il vous plaît vérifier les réponses mises à jour – Kharda

0

Essayez ci-dessous comme celui-ci.

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) { 
    }} 

Des informations plus détaillées sur https://androidacademic.blogspot.in/2016/12/multiple-buttons-onclicklistener-android.html

+1

Question demandée pour Kotlin et vous avez donné la réponse en Java. –

0

Vous pouvez essayer ce code suivant:

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 -> {} 
    } 
    } 
} 

J'espère que cela vous aidera.

0

Ce code a fonctionné pour moi:

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 -> {} 
    } 
} 

Ne pas oublier de mettre en œuvre View.OnClickListener dans votre classe.

2

Pour plusieurs onClickListeners dans kotlin(version:1.1.60), ce qui suit m'a aidé. J'espère que ça va aussi être utile à quelqu'un d'autre.

Mettre en œuvre OnClickListener à l'activité comme:

class YourActivity : AppCompatActivity(), View.OnClickListener 

définir votre bouton onCreate():

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

et attribuer onclick au bouton onCreate():

button.setOnClickListener { onClick(button) } 

et le remplacement méthode de onClick():

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