web-dev-qa-db-ja.com

Android setOnClickListenerメソッド-仕組みは?

このコードを理解するのに苦労しています。 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));
    }
});
22
rayleigh

それはこのように動作します。 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;
    }
}

しかし、クリックリスナを設定するたびに行うのは面倒です。したがって、これを回避するために、与えた例のように、メソッドの実装をその場で提供できます。

setOnClickListenerView.OnClickListenerをパラメーターとして。

15
cliffroot

これは、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;
        }
    }
6
nafees ahmed

マニュアル 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 を使用した単純な電卓の構築。

0
Developer

anonymouseクラスオブジェクト作成の実装により、コードの記述が簡単になり、時間を節約できます。

0
Pintspin