我的理解是,当我创建一个侦听点击的按钮对象时,我必须:
OnClickListner
使其在用户单击按钮后侦听用户的clickonClick
执行操作<>G29
现在,
setOnClickListener
在上述逻辑中的位置是什么?这是我在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);
...
}
您可能还会发现,将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
}
}
发布于 2015-04-07 05:19:49
逻辑很简单。setOnClickListener
属于步骤2。
OnClickListener
*的实例,然后使用片段/活动onCreate
-method.onClick
覆盖该OnClickListener
将该OnClickListener
分配给该按钮。用户单击该按钮时,将调用分配的OnClickListener
的onClick
函数。<代码>H216<代码>G217*如果您使用import android.view.View;
,则使用View.OnClickListener
。如果你使用import android.view.View.*;
或import android.view.View.OnClickListener;
,据我所知,你使用的是OnClickListener
。
另一种方式是让你的活动/片段继承自OnClickListener
。这样,您可以将您的片段/活动指定为按钮的侦听器,并将onClick
实现为成员函数。
发布于 2015-04-07 05:23:18
假设我们有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;
}
}
}
最后,这里没有真正的区别,只是“比其他的”要好得多
发布于 2017-03-13 11:17:34
请注意,为了简单起见,我只参考了第一个代码片段,即,
// 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)
是View类的一个公共方法。Button类扩展了View类,因此可以调用setOnClickListener(View.OnClickListener l)
方法。
setOnClickListener注册了一个回调,当单击视图(在本例中为按钮)时将调用它。这个答案应该能回答你的前两个问题:
1. setOnClickListener
在上述逻辑中的位置是什么?
Ans。当按钮被点击时,它注册一个回调。(在下一段中详细解释)。
2.到底是哪一个人在监听按钮点击?
Ans。setOnClickListener
方法是实际侦听按钮单击的方法。
当我说它注册了一个要调用的回调时,我的意思是它将运行View.OnClickListener l
,这是该方法的输入参数。在您的示例中,它将是button.setOnClickListener(mCorkyListener);
中提到的mCorkyListener
,然后它将执行
// 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(View v)
。因此,在单击按钮时需要执行的任何操作都必须在此方法中进行编码。
既然您已经了解了setOnClickListener
和OnClickListener
的含义,我相信您自己就能够区分这两种语言了。第三个术语View.OnClickListener
实际上就是OnClickListener
本身。将View.
放在前面的唯一原因是因为程序开始时import
语句的不同。如果只使用import android.view.View;
作为导入语句,则必须使用View.OnClickListener
。如果您提到以下两个导入语句之一:import android.view.View.*;
或import android.view.View.OnClickListener;
,则可以跳过View.
,只需使用OnClickListener
。
https://stackoverflow.com/questions/29479647
复制相似问题