使用Activity实现OnClickListener有什么影响?

时间:2012-01-14 23:49:08

标签: java android

我不明白为什么我必须实现OnClickListener来使用OnClick方法。假设这段代码:

public class KlickitestActivity extends Activity implements OnClickListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

@Override
public void onClick(View v) {
    // code what happens when a click is made
}

从类OnClickListener我只使用onClick(View v)方法 - 这个被覆盖。为什么我不能在不实现OnClickListener的情况下定义onClick方法?

2 个答案:

答案 0 :(得分:5)

你可以。您可以使用Anonymous Inner Class:

来实现
Button1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
           //Do stuff
        }});
Button2.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
           //Do stuff
        }});

但是,实现OnClickListener可以更轻松地处理事件,并提高代码可读性。即你可以使用一个Listener方法,并使用switch语句传递View来处理多个按钮/监听器,类似于:

public void onClick(View view){
    switch(view.getId()){

    case R.id.Button1:
        //Stuff for button 1
        break;

    case R.id.Button2:
        //Stuff for button 2
        break;
        break;

   case R.id.Button3:
        //Stuff for button 3
        break;
    }

答案 1 :(得分:1)

只是为了扩展Mob的答案以及Scott的评论和链接......

Activity主要是UI的框架,因此没有预先定义的与用户交互的方式。作为设计人员/开发人员,我们根据Activity的目的选择我们希望Activity包含哪些UI组件。

ButtonsCheckBoxesListViews等用户界面组件用于完全不同的目的,它不是Activity的基本形式的地方要知道这些UI元素对哪些事件做出反应(点击,长按,滑动等),因为没有Activity始终托管的预定义UI元素集。因此,我们有责任根据我们设计UI的方式实现我们需要使用的事件处理程序(侦听器)。