0

一般来说,我是 Android 和 java 编码的初学者,到目前为止,在各种教程中,我发现了两种处理按钮被点击的方法。

第一个:

button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                //do your thing
            }
        });

第二个涉及android:onClick="someMethod"在 main.xml 中放入按钮的属性,然后someMethod在活动中简单地创建方法。

我想知道这两种方法有什么区别。一个比另一个更好吗?还是它们的工作方式略有不同?对我来说,他们似乎也在做同样的事情:P

谢谢!

4

4 回答 4

1

我想知道这两种方法有什么区别。一个比另一个更好吗?

结果是一样的。但区别在于代码的可读性。

android:onClick="someMethod"

这种方法我不推荐给你。

我建议您按照anonymous classes上面的意思使用。

例如,您的类也可以实现View.OnClickListener,然后您只需要实现onClick()方法,并且您可以为许多小部件使用一种方法。

public class Main extends Activity implements View.OnClickListener {
   public void onClick(View view) {
      switch(view.getId()) {
         case R.id.startBtn:
            // do some work
         break;
         case R.id.anotherWidgetId:
            // do some work
         break;
      }
   }
}

我认为这也是一种很好的做法,你只有一种方法,代码行更少,更干净。

于 2012-06-27T17:27:26.277 回答
0

在第一个中:您正在务实地定义一个方法,每次按下按钮都会调用该方法。在第二个中:您提到了按下按钮时将调用的活动的方法名称。

这完全取决于您喜欢以哪种方式设置点击侦听器。

就个人而言,我喜欢务实地设置点击侦听器,以便在浏览代码时知道哪些代码将在按钮的 onClick 处执行。

于 2012-06-27T16:58:25.670 回答
0

当您使用 android:onClick="someMethod" 时,该方法位于保存单击视图的 Activity 上。如果您在列表项上使用它,则(在某些情况下)在活动上处理单击会更方便。如果您将使用匿名类方法,则需要在适配器上设置它,它并不总是可以访问活动(如果是这样 - 它可能会变得混乱......)。因此,如果您需要保存列表的活动中的内容(保存该可点击项目) - 我认为使用 android:onClick 方法会更干净。

除此之外 - 它几乎是一样的。请务必记录您使用 android:onClick 调用的方法,因为以后有时很难跟踪它们的来源。

于 2012-06-28T00:51:29.897 回答
0

处理双击android按钮

// These variables as global
private final static long DOUBLE_CLICK_INTERVAL=250;
private static boolean doubleClick=false;
private static long lastClickTime=0;    
private static Handler handler;

// In button method
long clickTime=SystemClock.uptimeMillis(); 

if(clickTime-lastClickTime <= DOUBLE_CLICK_INTERVAL) { // If double click...

    Toast.makeText(getApplicationContext(), "Double Click Event",Toast.LENGTH_SHORT).show();
    doubleClick=true;

} else { // If not double click....

    doubleClick=false;
    handler=new Handler();
    handler.postDelayed(new Runnable(){
        @Override
        public void run(){
            if(!doubleClick){
                Toast.makeText(getApplicationContext(),"Single Click Event",Toast.LENGTH_SHORT).show();
            }                   
        }
    }, DOUBLE_CLICK_INTERVAL);      
}

lastClickTime=clickTime; 
于 2013-09-18T10:42:42.377 回答