nin*_*oto 34 android onclicklistener
我的理解是,当我创建一个侦听点击的按钮对象时,我必须:
OnClickListner使它听取用户的点击onClick在用户单击按钮后执行操作现在,
setOnClickListener符合上述逻辑?setOnClickListener? OnClickListener? View.OnClickListener? 这是我在Android Dev中发现的:
//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);
...
}
Run Code Online (Sandbox Code Playgroud)
您可能还会发现将其OnClickListener作为您的一部分实施更方便Activity.这将避免额外的类加载和对象分配.例如:
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
}
}
Run Code Online (Sandbox Code Playgroud)
Ibr*_*uki 54
想象一下,我们有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
}
};
}
Run Code Online (Sandbox Code Playgroud)
那么我们会做什么?
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;
}
}
};
}
Run Code Online (Sandbox Code Playgroud)
或者我们可以这样做:
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
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
或者我们可以实现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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
最后这里没有真正的区别只是"方式比其他更好"
小智 23
逻辑很简单.setOnClickListener属于第2步.
OnClickListener*的实例,就像在该示例中完成的那样,并覆盖onClick-method.OnClickListener可以btn.setOnClickListener(myOnClickListener);在fragment/activities onCreate-method中使用该按钮分配该按钮.onClick调用已分配的功能OnClickListener.*如果import android.view.View;你使用View.OnClickListener.如果你import android.view.View.*;或import android.view.View.OnClickListener;你使用OnClickListener我得到它.
另一种方法是让你活动/片段继承OnClickListener.这样,您可以将片段/活动指定为按钮的侦听器,并将其实现onClick为成员函数.
请注意,为简单起见,我仅参考了第一个代码片段,即:
// 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);
...
}
Run Code Online (Sandbox Code Playgroud)
setOnClickListener(View.OnClickListener l)是View类的公共方法.Button类扩展了View类,因此可以调用setOnClickListener(View.OnClickListener l)方法.
setOnClickListener注册一个回调,当单击视图(在您的情况下为按钮)时,将调用该回调.这个答案应该回答你的前两个问题:
1.哪里setOnClickListener符合上述逻辑?
答.它在单击按钮时注册回调.(在下一段中详细解释).
2.哪一个实际上听按钮点击?
答.setOnClickListener方法是实际监听按钮单击的方法.
当我说它注册一个要调用的回调时,我的意思是它将运行该View.OnClickListener l方法的输入参数.在您的情况下,将mCorkyListener提到button.setOnClickListener(mCorkyListener);将执行其中onClick(View v)提到的方法
// Create an anonymous implementation of OnClickListener
private OnClickListener mCorkyListener = new OnClickListener() {
public void onClick(View v) {
// do something when the button is clicked
}
};
Run Code Online (Sandbox Code Playgroud)
继续前进,OnClickListener是一个接口定义,用于在单击视图(在您的情况下为按钮)时调用回调.简单地说,当您单击该按钮时,将执行其中的方法mCorkyListener(因为它是一个实现OnClickListener).但是,OnClickListener只有一种方法OnClick(View v).因此,无论在单击按钮时需要执行的任何操作都必须在此方法中进行编码.
现在你知道了什么setOnClickListener和OnClickListener意思,我相信你自己能够区分这两者.第三个词View.OnClickListener实际上OnClickListener就是它自己.你View.之前唯一的原因是因为import程序开头的规则存在差异.如果您只有import android.view.View;import语句,则必须使用View.OnClickListener.如果你提到这些导入语句中的任何一个:
import android.view.View.*;或者import android.view.View.OnClickListener;你可以跳过View.并简单地使用OnClickListener.
View 是所有小部件的超类,OnClickListener 接口属于此类。所有小部件都继承了这一点。View.OnClickListener 与 OnClickListener 相同。您必须覆盖此侦听器中的 onClick(View 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
}
});
Run Code Online (Sandbox Code Playgroud)
onClick() 方法中传递的“View”参数只是让 Android 知道某个视图已被单击。它可以是 Button 或 TextView 或其他东西。您可以为每个小部件设置一个 OnClickListener 或简单地使包含所有这些小部件的类实现该接口。在这种情况下,您将有一个用于所有小部件的通用 onClick() 方法,您所要做的就是检查传递给该方法的视图的 id,然后将其与您想要的每个元素的 id 进行匹配,对该元素采取行动。
| 归档时间: |
|
| 查看次数: |
177945 次 |
| 最近记录: |