今天写了几行极为简单的代码,就是想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.    对于这个相对比较简单的问题,自己也栽到坑里了,感觉非常羞愧,所以在此警示,希望大家也不要犯低级失误。


github主页:https://github.com/chenyufeng1991 。欢迎大家访问!


更多相关文章

  1. 【Android】通过Java代码替换TabHost中的drawableTop资源
  2. Android培训班(72)Dex文件里类定义dvmDefineClass
  3. Android代码混淆proguard技…
  4. 一段漂亮的Fragment hide,show相关的代码
  5. android 周报 - 2019/10/6-Issue #382
  6. Android Studio 快捷键
  7. Android(安卓)- 用WebView开发简单的浏览器
  8. Android(安卓)Studio之初体验 ---- 很好很强大
  9. 【Android】说做就做:偶的头像华丽的漂浮在map上。。。

随机推荐

  1. android.graphics.Paint类详解
  2. Android开源项目分类汇总
  3. Java中HashMap如何工作的?
  4. android 管理wifi
  5. Google cardBoard Android(安卓)API (六)
  6. Google cardBoard Android(安卓)API (二)
  7. android自动登陆SharedPreferences
  8. Android调用摄像头
  9. AndroidStudio 报错
  10. 过期API_AlertDialog