码迷,mamicode.com
首页 > 移动开发 > 详细

Android中使用OnClickListener接口实现按钮点击的低级失误

时间:2015-07-16 12:05:32      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:android

       今天写了几行极为简单的代码,就是想implements  View.OnCLickListener.然后实现按钮点击操作。但是按钮却没有反应,找了五分钟还是没有结果。

以下是我的代码,希望大家不要嘲笑:

XML布局如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/id_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="按钮" />

</RelativeLayout>

最初Java代码如下:

public class MainActivity extends Activity implements View.OnClickListener {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.id_btn:
                Toast.makeText(MainActivity.this, "被点击了", Toast.LENGTH_LONG).show();
                break;

            default:
                break;
        }
    }
}

       但是按钮点击没有任何反应,经过检查后,发现是Button没有初始化,那好,现在初始化Button,修改代码如下:

public class MainActivity extends Activity implements View.OnClickListener {

    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.id_btn);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.id_btn:
                Toast.makeText(MainActivity.this, "被点击了", Toast.LENGTH_LONG).show();
                break;

            default:
                break;
        }
    }
}

       定义了Button并且findViewById()后,发现点击按钮还是没有任何反应。再次研究了五分钟,终于发现了问题关键,最后修改代码如下:

public class MainActivity extends Activity implements View.OnClickListener {

    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.id_btn);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.id_btn:
                Toast.makeText(MainActivity.this, "被点击了", Toast.LENGTH_LONG).show();
                break;

            default:
                break;
        }
    }
}

        最后实现效果如下:

技术分享


        现在来总结一下,怎么会出现如此低级的错误。对于实现接口来点击按钮,并需加入一行代码就是:

 button.setOnClickListener(this);

    我来简单解释一下这个方法public void setOnClickListener(View.OnClickListener),官方的英文解释是“Register a callback to be invoked when this view is clicked.If this view is not clickable,it becomes clickable.”.翻译过来就是“当控件被点击的时候,这个已经注册的回调方法将会被调用(invoked).如果这个控件本来是不能被点击的,
那么现在就可以被点击。”
    所以直观的理解就是为View设置一个监听器,监听这个View的操作。如果没有该方法,则点击操作不会响应对应的回调方法。参数使用this表示在该Activity中,在这里this==MainActivity.this.
    对于这个相对比较简单的问题,自己也栽到坑里了,感觉非常羞愧,所以在此警示,希望大家也不要犯低级失误。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android中使用OnClickListener接口实现按钮点击的低级失误

标签:android

原文地址:http://blog.csdn.net/chenyufeng1991/article/details/46906509

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!