问题描述
我的理解是在我创建一个侦听点击的按钮对象时,我必须: 1.创建按钮对象 2.使用OnClickListner使其收听用户的点击 3.使用onclick在用户单击按钮后执行操作
现在濑塞托里克利克洛斯琴在哪里适合上述逻辑?哪一个实际上侦听按钮点击? SetonClickListener? onclicklistener? View.onClickListener?这些3之间的差异是什么?
这是我在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作为活动的一部分实现更方便.这将避免额外的类负载和对象分配.例如:
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个按钮
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; } } }
最后在这里没有真正的差异<强>"
更好的方式问题描述
My understanding is when I'm creating a button object that listens for a click I have to: 1. create the button object 2. use OnClickListner to make it listen to the user's click 3. use onClick to execute actions after the user clicks the button
now where do setOnClickListener fit into the above logic? Which one actually listens to the button click? setOnclickListener? ONclickListener ? View.OnClickListener? what are the differences between those 3?
Here is what I found in 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); ... }
You may also find it more convenient to implement OnClickListener as a part of your Activity. This will avoid the extra class load and object allocation. For example:
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 } }
推荐答案
Imagine that we have 3 buttons for example
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 what we will do?
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; } } }; }
Or we can do this:
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 } }); } }
Or we can implement View.OnClickListener and i think it's the best way:
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; } } }
Finally there is no real differences here Just "Way better than the other"