2

哪一种是在 Android 中实现 OnClickListener 接口的最佳方法。

/*- 第一的 - */

public class EmployeeActivity extends Activity implements OnClickListener
{

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    Button btnUpdate = (Button)findViewById(R.id.btnUpdate);
        Button btnEdit = (Button)findViewById(R.id.btnEdit);

        btnUpdate.setOnClickListener(this);
        btnEdit.setOnClickListener(this);

    @Override
    public void onClick(View v) {

        if (v == btnAddEmployee) 
      {}
    if (v == btnUpdate) 
    {}
}

/ - 第二 - /

public class EmployeeActivity extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btnUpdate = (Button)findViewById(R.id.btnUpdate);
        Button btnEdit = (Button)findViewById(R.id.btnEdit);

        btnUpdate.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

            }
        });

        btnEdit.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

            }
        });
    }
}
4

5 回答 5

2

哪一种是在 Android 中实现 OnClickListener 接口的最佳方法

这完全取决于什么最适合您作为开发人员。它们的工作原理都是一样的,您甚至可以选择onClick在 xml 中声明。我喜欢第一个,特别是如果您有多个Button要共享功能的 s。但是第一个更好的方法是在switch被点击的地方。就像是idView

@Override
public void onClick(View v) {
    int id = v.getId();
    switch (id)
    {
        case R.id.btnUpdate:
           // do work
           break;
        case R.id.btnEdit
           // do work for edit button
           break;
    }
    // put shared functionality code like starting an Activity, calling a method, etc...
}

如果只有一个或两个Buttons 并且它们具有完全不同的功能,我喜欢使用第二个。如果 s 太多,我认为这种方式会使代码看起来更加杂乱无章Button。但这些都是一样的,不会改变你的应用程序的性能。

于 2013-10-25T14:37:50.627 回答
0

没有一个是“更好的”。您使用哪一种是个人选择,取决于哪一种适合您的编码风格。

第二种方法的优点是您可以OnClickListener为每个视图拥有一个唯一的。第一个选项的优点是您的所有onClick()代码都在一个地方。

于 2013-10-25T14:37:56.790 回答
0

第一种方法很好。但是,而不是 if-else。使用开关盒。

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    Button btnUpdate = (Button)findViewById(R.id.btnUpdate);
        Button btnEdit = (Button)findViewById(R.id.btnEdit);

        btnUpdate.setOnClickListener(this);
        btnEdit.setOnClickListener(this);

    @Override
    public void onClick(View v) {

       switch(v.getId())
      {
      case R.id.btnUpdate:
        //your work
       break
}
于 2013-10-25T14:40:03.643 回答
0

你的第一个例子是不正确的,你不应该这样比较对象。您需要执行以下操作:

switch(v.getId()) {
    case R.id.yourButton:
        ...
}

它们在大多数情况下都是等效的,除了第二个为每个侦听器分配一个新对象。如果我在一个屏幕上有很多按钮,我喜欢像第一个示例中那样组织它,以避免更多样板代码。

于 2013-10-25T14:40:40.577 回答
0

这取决于您在当前活动中拥有的元素数量。对于几个按钮(2 或 3),我更喜欢第二种方法。除此之外,我使用第一种方法,当然还有一个 switch 语句。

于 2013-10-25T14:45:43.593 回答