Ik heb problemen met het begrijpen van deze code. Ik begrijp dat findViewById
de knopwidget zal krijgen en dan zal casten. Vervolgens gaat het de knop gebruiken om de methode setOnClickListener
aan te roepen. Ik weet echter niet wat dat argument is dat wordt doorgegeven aan de setOnClickListener
en ik heb nog nooit zo’n code gezien. Hoe komt het dat het een nieuw object creëert, maar in staat is om een eigen methode te creëren binnen het argument van een andere methode? Zou fijn zijn als iemand dat zou kunnen uitleggen. En welk type object neemt de methode setOnClickListener
op?
btn = (Button)findViewById(R.id.firstButton);
btn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
tv.setText(months[rand.nextInt(12)]);
tv.setTextColor(Color.rgb(rand.nextInt(255)+1, rand.nextInt(255)+1, rand.nextInt(255)+1));
}
});
Antwoord 1, autoriteit 100%
Het werkt als volgt. View.OnClickListenere is gedefinieerd –
public interface OnClickListener {
void onClick(View v);
}
Voor zover we weten kunt u een object OnClickListener
niet instantiëren, omdat er geen methode voor is geïmplementeerd. Er zijn dus twee manieren waarop u kunt gaan – u kunt deze interface implementeren die de onClick
-methode als volgt overschrijft:
public class MyListener implements View.OnClickListener {
@Override
public void onClick (View v) {
// your code here;
}
}
Maar het is vervelend om dit elke keer te doen omdat je een kliklistener wilt instellen. Dus om dit te voorkomen, kunt u ter plekke de implementatie van de methode leveren, net zoals in een voorbeeld dat u gaf.
setOnClickListener
neemt View.OnClickListener
als parameter.
Antwoord 2, autoriteit 46%
Dit is de beste manier om Onclicklistener te implementeren voor veel knoppen op een rij
Implementeer View.onclicklistener.
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Dit is een knop in de MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_submit = (Button) findViewById(R.id.submit);
bt_submit.setOnClickListener(this);
}
Dit is een overschrijfmethode
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.submit:
//action
break;
case R.id.secondbutton:
//action
break;
}
}
Antwoord 3
Dat wat de handleiding zegtover setOnClickListener
methode is:
public void setOnClickListener (View.OnClickListener l)
Toegevoegd in API-niveau 1 Registreer een callback die moet worden aangeroepen bij deze weergave
wordt geklikt. Als deze weergave niet klikbaar is, wordt deze wel klikbaar.
Parameters
l View.OnClickListener: de callback die wordt uitgevoerd
En normaal gesproken moet je het zo gebruiken
public class ExampleActivity extends Activity implements OnClickListener {
protected void onCreate(Bundle savedValues) {
...
Button button = (Button)findViewById(R.id.corky);
button.setOnClickListener(this);
}
// Implement the OnClickListener callback
public void onClick(View v) {
// do something when the button is clicked
}
...
}
Bekijk deze les ook