zoukankan      html  css  js  c++  java
  • Android中使用OnClickListener接口实现button点击的低级失误

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


  • 相关阅读:
    替换空格-请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
    cocoapod卡在了analyzing dependencies
    前台技术--div的隐藏与显示
    POJ 3252 Round Numbers(组合数学)
    6. oracle学习入门系列之六 模式
    Python基础教程之第3章 使用字符串
    PHP+FastCGI+Nginx动态请求处理配置
    cocos2d-x cocoStudioUI编辑器导出文件的使用
    分布式系统生成唯一主键
    Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6739590.html
Copyright © 2011-2022 走看看