標籤:android
今天寫了幾行極為簡單的代碼,就是想implements View.OnCLickListener.然後實現按鈕點擊操作。但是按鈕卻沒有反應,找了五分鐘還是沒有結果。
以下是My Code,希望大家不要嘲笑:
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介面實現按鈕點擊的低級失誤