ray*_*igh 22 android button onclicklistener
我无法理解这段代码.我得到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));
}
});
Run Code Online (Sandbox Code Playgroud)
cli*_*oot 15
它的工作原理如下.View.OnClickListenere已定义 -
public interface OnClickListener {
void onClick(View v);
}
Run Code Online (Sandbox Code Playgroud)
据我们所知,您无法实例化对象OnClickListener,因为它没有实现方法.所以有两种方法可以实现 - 你可以实现这个接口,它会覆盖这样的onClick方法:
public class MyListener implements View.OnClickListener {
@Override
public void onClick (View v) {
// your code here;
}
}
Run Code Online (Sandbox Code Playgroud)
但是每次想要设置点击监听器时都要这么做是很乏味的.因此,为了避免这种情况,您可以在现场提供方法的实现,就像您给出的示例一样.
setOnClickListener需要View.OnClickListener作为参数.
这是为行实现View.onclicklistener中的许多按钮实现Onclicklistener的最佳方法.
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Run Code Online (Sandbox Code Playgroud)
这是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);
}
Run Code Online (Sandbox Code Playgroud)
这是一种覆盖方法
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.submit:
//action
break;
case R.id.secondbutton:
//action
break;
}
}
Run Code Online (Sandbox Code Playgroud)