Android OnClickListener机制

时间:2014-04-29 04:21:03

标签: java android

我是Android和java的初学者。我无法理解我的这部分代码。可能是创建一个匿名对象。我无法理解这段代码的机制。请帮助我。

btn.setOnClickListener(new OnClickListener() {

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

    }
}); 

3 个答案:

答案 0 :(得分:9)

enter image description here

您在前面的示例中最简单地看到的事件模型非常强大且灵活。任意数量的事件侦听器对象都可以侦听来自任意数量的事件源对象的各种事件。例如,程序可能会为每个事件源创建一个侦听器。或者程序可能只有一个侦听器来处理来自所有源的所有事件。对于来自单个事件源的单一事件,程序甚至可以拥有多个侦听器。

Java有三种事件列表机制。

<强> 1。匿名条款

Android开发人员经常使用匿名内部类来定义专门的侦听器,这些侦听器在事件发生时为特定行为注册回调。例如,要监听View控件的单击,开发人员必须调用setOnClickListener()方法,该方法接受一个参数:一个View.OnClickListener对象。 开发人员通常使用匿名内部类技术来创建,定义和使用他们的自定义View.OnClickListener,如下所示:

Button aButton = (Button) findViewById(R.id.MyButton);
aButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // User clicked my button, do something here!
            }
});

<强> 2。 onclick侦听器的单独类。

    class MyActivity extends Activity {

    public void myMethod() {
       MyClickHandler handler = new MyClickHandler();
        Button[] buttons = getAllOneHundredButtonsAsArray();
        for (Button button : buttons) {
            button.setOnClickListener(handler);
        }
    }

    class MyClickHandler implements View.OnClickListener {
        public void onClick(View v) {
            showToast(((Button) v).getText());
        }
    }
}

答案 1 :(得分:2)

btn.setOnClickListener(new OnClickListener() {

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

    }
});

在上面的代码中,btn是Button类的对象。首先,你必须声明按钮的对象,然后初始化它。 有关示例的更多详细信息,请访问此链接 http://androidtutorial4u.blogspot.in/2014/04/button-in-android-example.html

答案 2 :(得分:0)

您也可以这样写:

public class MainActivity extends ActionBarActivity implements onClickListener{
    Button b,b1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b = (Button)findViewById(R.id.btn);
        b1 = (Button)findViewById(R.id.btn);
        b.setOnClickListener(this);
        b1.setOnClickListener(this);
    }

    @Override
    public void onClick(View arg0) {
        if(arg0.getId() == R.id.btn)
        {
            /*do some work on the button click*/
        }
        else if(arg0.getId() == R.id.btn)
        {
            /*do some work on the button-1 click*/
        }
    }
}