Android-setOnClickListener vs OnClickListener vs View.OnClickListener
我的理解是,当我创建侦听单击的按钮对象时,我必须:Android-setOnClickListener vs OnClickListener vs View.OnClickListener,android,onclicklistener,Android,Onclicklistener,我的理解是,当我创建侦听单击的按钮对象时,我必须: 创建按钮对象 使用OnClickListner使其能够听到用户的单击 在用户单击按钮后,使用onClick执行操作 现在, setOnClickListener在哪里适合上述逻辑 哪一个会真正听到按钮的点击 setOnClickListener OnClickListener View.OnClickListener 这三者之间有什么区别 以下是我在Android Dev中发现的内容: //The example below shows h
OnClickListner
使其能够听到用户的单击onClick
执行操作
在哪里适合上述逻辑李>setOnClickListener
- 哪一个会真正听到按钮的点击李>
李>setOnClickListener
李>OnClickListener
李>View.OnClickListener
- 这三者之间有什么区别
//The example below shows how to register an on-click listener for a Button.
// Create an anonymous implementation of OnClickListener
private OnClickListener mCorkyListener = new OnClickListener() {
public void onClick(View v) {
// do something when the button is clicked
}
};
protected void onCreate(Bundle savedValues) {
...
// Capture our button from layout
Button button = (Button)findViewById(R.id.corky);
// Register the onClick listener with the implementation above
button.setOnClickListener(mCorkyListener);
...
}
您还可能会发现,作为活动的一部分实施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
}
}
逻辑很简单setOnClickListener
属于步骤2
您可以创建按钮
您可以像在该示例中一样创建onClick-listener
*的实例,并重写onClick
-方法
使用btn.setOnClickListener(myOnClickListener)将该OnClickListener
分配给该按钮代码>在片段/活动中onCreate
-method
当用户单击该按钮时,将调用分配的OnClickListener
的onClick
函数
*如果您导入android.view.view
您可以使用View.OnClickListener
。如果您导入android.view.view.*
或导入android.view.view.OnClickListener就我所知,code>您使用OnClickListener
另一种方法是让您的活动/片段继承自OnClickListener
。通过这种方式,您可以将片段/活动指定为按钮的侦听器,并将onClick
实现为成员函数
首先,View.OnClickListener
和OnClickListener
之间没有区别。如果直接使用View.OnClickListener
,则无需编写-
导入android.view.view.OnClickListener
通过setOnclickListener()
将OnClickListener实例(例如myListener
命名对象)设置为视图的侦听器。当触发单击
事件时,会通知myListener
,并调用它的onClick(View-View)
方法。这是我们完成自己任务的地方。
希望这对你有帮助
例如,假设我们有3个按钮
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Capture our button from layout
Button button = (Button)findViewById(R.id.corky);
Button button2 = (Button)findViewById(R.id.corky2);
Button button3 = (Button)findViewById(R.id.corky3);
// Register the onClick listener with the implementation above
button.setOnClickListener(mCorkyListener);
button2.setOnClickListener(mCorkyListener);
button3.setOnClickListener(mCorkyListener);
}
// Create an anonymous implementation of OnClickListener
private View.OnClickListener mCorkyListener = new View.OnClickListener() {
public void onClick(View v) {
// do something when the button is clicked
// Yes we will handle click here but which button clicked??? We don't know
}
};
}
那我们该怎么办
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Capture our button from layout
Button button = (Button)findViewById(R.id.corky);
Button button2 = (Button)findViewById(R.id.corky2);
Button button3 = (Button)findViewById(R.id.corky3);
// Register the onClick listener with the implementation above
button.setOnClickListener(mCorkyListener);
button2.setOnClickListener(mCorkyListener);
button3.setOnClickListener(mCorkyListener);
}
// Create an anonymous implementation of OnClickListener
private View.OnClickListener mCorkyListener = new View.OnClickListener() {
public void onClick(View v) {
// do something when the button is clicked
// Yes we will handle click here but which button clicked??? We don't know
// So we will make
switch (v.getId() /*to get clicked view id**/) {
case R.id.corky:
// do something when the corky is clicked
break;
case R.id.corky2:
// do something when the corky2 is clicked
break;
case R.id.corky3:
// do something when the corky3 is clicked
break;
default:
break;
}
}
};
}
或者我们可以这样做:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Capture our button from layout
Button button = (Button)findViewById(R.id.corky);
Button button2 = (Button)findViewById(R.id.corky2);
Button button3 = (Button)findViewById(R.id.corky3);
// Register the onClick listener with the implementation above
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do something when the corky is clicked
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do something when the corky2 is clicked
}
});
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do something when the corky3 is clicked
}
});
}
}
或者我们可以实现View.OnClickListener,我认为这是最好的方法:
public class MainActivity extends ActionBarActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Capture our button from layout
Button button = (Button)findViewById(R.id.corky);
Button button2 = (Button)findViewById(R.id.corky2);
Button button3 = (Button)findViewById(R.id.corky3);
// Register the onClick listener with the implementation above
button.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// do something when the button is clicked
// Yes we will handle click here but which button clicked??? We don't know
// So we will make
switch (v.getId() /*to get clicked view id**/) {
case R.id.corky:
// do something when the corky is clicked
break;
case R.id.corky2:
// do something when the corky2 is clicked
break;
case R.id.corky3:
// do something when the corky3 is clicked
break;
default:
break;
}
}
}
最后,这里没有什么真正的区别,只是“比另一个更好”视图是所有小部件的超类,OnClickListener接口属于这个类。所有小部件都继承了这一点。View.OnClickListener与OnClickListener相同。您必须重写此侦听器中的onClick(View)方法,以实现按钮所需的操作
要让Android监听小部件的点击事件,您需要执行以下操作:
widget.setOnClickListener(this); // If the containing class implements the interface
// Or you can do the following to set it for each widget individually
widget.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Do something here
}
});
onClick()方法中传递的'View'参数只是让Android知道已单击视图。它可以是一个按钮、文本视图或其他东西。您可以为每个小部件设置OnClickListener,或者让包含所有这些小部件的类实现接口。在本例中,您将有一个公共onClick()方法,您所要做的就是检查传递给该方法的视图的id,然后将其与您想要的每个元素的id进行匹配,并对该元素执行操作。请注意,为了简单起见,我只参考了第一个代码段,即
// Create an anonymous implementation of OnClickListener
private OnClickListener mCorkyListener = new OnClickListener() {
public void onClick(View v) {
// do something when the button is clicked
}
};
protected void onCreate(Bundle savedValues) {
...
// Capture our button from layout
Button button = (Button)findViewById(R.id.corky);
// Register the onClick listener with the implementation above
button.setOnClickListener(mCorkyListener);
...
}
setOnClickListener(View.OnClickListener l)
是视图类的公共方法。Button类扩展了View类,因此可以调用setOnClickListener(View.OnClickListener l)
方法
setOnClickListener注册一个回调,在单击视图(在您的示例中为按钮)时调用该回调。此答案应回答您的前两个问题:
1。setOnClickListener
在上述逻辑中的位置是什么?
答:单击按钮时,它会注册回调。(下一段将详细解释)
2。哪个人会真正听到按钮的点击?
答:setOnClickListener
方法是实际侦听按钮单击的方法
当我说它注册要调用的回调时,我的意思是它将运行View.OnClickListener l
,这是该方法的输入参数。在您的情况下,它将是button.setOnClickListener(mCorkyListener)中提到的mCorkyListener
代码>然后将执行中提到的方法onClick(视图v)
// Create an anonymous implementation of OnClickListener
private OnClickListener mCorkyListener = new OnClickListener() {
public void onClick(View v) {
// do something when the button is clicked
}
};
进一步说,OnClickListener
是一个接口定义,用于在单击视图(本例中的按钮)时调用回调。简单地说,当您单击该按钮时,将执行mCorkyListener
中的方法(因为它是OnClickListener
的实现)。但是,OnClickListener
只有一种方法,那就是OnClick(视图v)
。因此,单击按钮时需要执行的任何操作都必须在此方法中进行编码
既然您知道了setOnClickListener
和OnClickListener
的意思,我相信您自己就能区分这两个词。第三个术语View.OnClickListener
实际上是OnClickListener
本身。前面有视图。
的唯一原因是因为