我无法理解这段代码。我得到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));
}
});
答案 0 :(得分:14)
它的工作原理如下。 View.OnClickListenere已定义 -
public interface OnClickListener {
void onClick(View v);
}
据我们所知,您无法实例化对象OnClickListener
,因为它没有实现方法。所以有两种方法可以实现 - 你可以实现这个覆盖onClick
方法的接口:
public class MyListener implements View.OnClickListener {
@Override
public void onClick (View v) {
// your code here;
}
}
但是每次想要设置点击监听器时,这样做很麻烦。因此,为了避免这种情况,您可以在现场提供方法的实现,就像您给出的示例一样。
setOnClickListener
将View.OnClickListener
作为参数。
答案 1 :(得分:6)
这是为连续多个按钮实现Onclicklistener的最佳方法 实现View.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;
}
}
答案 2 :(得分:0)
关于setOnClickListener
方法的手册says是:
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
}
...
}
答案 3 :(得分:0)
它实现了匿名类对象的创建,以简化代码编写并节省时间
答案 4 :(得分:-1)
它按照匿名内部类的相同原理工作,我们可以实例化接口而无需实际定义类:
参考:https://www.geeksforgeeks.org/anonymous-inner-class-java/