このコードを理解するのに苦労しています。 findViewById
がボタンウィジェットを取得し、それをキャストすることを取得します。次に、ボタンを使用してsetOnClickListener
メソッドを呼び出します。しかし、その引数がsetOnClickListener
に渡されることはわかりませんし、そのようなコードを見たこともありません。新しいオブジェクトを作成しますが、別のメソッドの引数内に独自のメソッドを作成できるのはどうですか?誰かがそれを説明できたら素晴らしいと思います。また、setOnClickListener
メソッドはどのタイプのオブジェクトを取り込みますか?
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));
}
});
それはこのように動作します。 View.OnClickListenereが定義されています-
public interface OnClickListener {
void onClick(View v);
}
メソッドが実装されていないため、オブジェクトOnClickListener
をインスタンス化することはできません。そのため、次の2つの方法があります。次のようにonClick
メソッドをオーバーライドするこのインターフェイスを実装できます。
public class MyListener implements View.OnClickListener {
@Override
public void onClick (View v) {
// your code here;
}
}
しかし、クリックリスナを設定するたびに行うのは面倒です。したがって、これを回避するために、与えた例のように、メソッドの実装をその場で提供できます。
setOnClickListener
はView.OnClickListener
をパラメーターとして。
これは、View.onclicklistenerを実装する行の多くのボタンにOnclicklistenerを実装する最良の方法です。
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
これは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);
}
これはオーバーライドメソッドです
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.submit:
//action
break;
case R.id.secondbutton:
//action
break;
}
}
マニュアル says about setOnClickListener
メソッドとは:
public void setOnClickListener (View.OnClickListener l)
APIレベル1で追加このビューがクリックされたときに呼び出されるコールバックを登録します。このビューがクリック可能でない場合、クリック可能になります。
パラメータ
l View.OnClickListener:実行されるコールバック
そして、通常はこのように使用する必要があります
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
}
...
}
このレッスンもご覧ください Android Studio を使用した単純な電卓の構築。
anonymouseクラスオブジェクト作成の実装により、コードの記述が簡単になり、時間を節約できます。