Button按鈕設置點擊的四種監聽方式
注:加粗放大的都是改變的代碼
1.使用匿名內部類的形式進行設置
使用匿名內部類的形式,直接將需要設置的onClickListener接口對象初始化,內部的onClick方法會在按鈕被點擊的時候執行
第一個活動的java代碼:
1 package com.sanlian.buttontest; 2 3 import android.content.Intent; 4 import android.support.v7.app.AppCompatActivity; 5 import android.os.Bundle; 6 import android.view.View; 7 import android.widget.Button; 8 9 public class MainActivity extends AppCompatActivity { 10 11 @Override 12 protected void onCreate(Bundle savedInstanceState) { 13 super.onCreate(savedInstanceState); 14 setContentView(R.layout.activity_main); 15 //通過id找到關聯布局中的view控件 16 Button btn = (Button) findViewById(R.id.btn); 17 //給Button按鈕添加點擊的監聽 18 btn.setOnClickListener(new View.OnClickListener() { 19 @Override 20 //只要當前的設置的監聽器被觸發,這個方法就會被執行 21 public void onClick(View v) { 22 startActivity(new Intent(MainActivity.this,SecondAty.class)); 23 } 24 }); 25 } 26 }
第一個活動的xml代碼:
1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:paddingBottom="@dimen/activity_vertical_margin" 7 android:paddingLeft="@dimen/activity_horizontal_margin" 8 android:paddingRight="@dimen/activity_horizontal_margin" 9 android:paddingTop="@dimen/activity_vertical_margin" 10 tools:context="com.sanlian.buttontest.MainActivity" 11 > 12 13 <Button 14 android:id="@+id/btn" 15 android:layout_width="wrap_content" 16 android:layout_height="wrap_content" 17 android:text="點我"/> 18 </RelativeLayout>
第二個活動的java代碼:
1 package com.sanlian.buttontest; 2 3 import android.support.v7.app.AppCompatActivity; 4 import android.os.Bundle; 5 import android.text.SpannableString; 6 import android.text.style.StyleSpan; 7 import android.text.style.TypefaceSpan; 8 import android.widget.TextView; 9 10 public class SecondAty extends AppCompatActivity { 11 12 @Override 13 protected void onCreate(Bundle savedInstanceState) { 14 super.onCreate(savedInstanceState); 15 setContentView(R.layout.activity_second_aty); 16 17 18 19 } 20 }
第二個活動的xml代碼:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.sanlian.buttontest.SecondAty"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="這是第二個activty"/> </RelativeLayout>
程序運行結果截圖:
2.在xml文件中定義onClick屬性,java代碼中對應方法
在xml中定義onClick屬性。屬性中對應的值需要在java代碼中編寫對應的方法名。
注意:參數中的View必須-----》方法類似於:public void xxx(View v)
第一個活動的java代碼 :
1 package com.sanlian.buttontest; 2 3 import android.content.Intent; 4 import android.support.v7.app.AppCompatActivity; 5 import android.os.Bundle; 6 import android.view.View; 7 import android.widget.Button; 8 9 public class MainActivity extends AppCompatActivity { 10 11 @Override 12 protected void onCreate(Bundle savedInstanceState) { 13 super.onCreate(savedInstanceState); 14 setContentView(R.layout.activity_main); 15 } 16 public void skip(View v){ 17 startActivity(new Intent(MainActivity.this,SecondAty.class)); 18 } 19 20 21 }
第一個活動的xml代碼:
1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:paddingBottom="@dimen/activity_vertical_margin" 7 android:paddingLeft="@dimen/activity_horizontal_margin" 8 android:paddingRight="@dimen/activity_horizontal_margin" 9 android:paddingTop="@dimen/activity_vertical_margin" 10 tools:context="com.sanlian.buttontest.MainActivity" 11 > 12 13 <Button 14 android:id="@+id/btn" 15 android:layout_width="wrap_content" 16 android:layout_height="wrap_content" 17 android:onClick="skip" 18 android:text="點我"/> 19 </RelativeLayout>
其他的和匿名內部類的方法一樣。
3.Activity 實現onClickListener接口
在給Button按鈕設置點擊的監聽的時候直接讓當前的Activity實現onClickListener接口,這樣傳入的監聽對象就可以直接使用當前Activity.this
第一個活動的java代碼:
1 package com.sanlian.buttontest; 2 3 import android.content.Intent; 4 import android.support.v7.app.AppCompatActivity; 5 import android.os.Bundle; 6 import android.view.View; 7 import android.widget.Button; 8 9 public class MainActivity extends AppCompatActivity implements View.OnClickListener { 10 11 @Override 12 protected void onCreate(Bundle savedInstanceState) { 13 super.onCreate(savedInstanceState); 14 setContentView(R.layout.activity_main); 15 //找到控件的id,也叫控件的初始化 16 Button btn = (Button) findViewById(R.id.btn); 17 //給Button按鈕設置監聽 18 btn.setOnClickListener(this); 19 } 20 21 22 23 public void onClick(View v) { 24 //啟動另一個activity 25 startActivity(new Intent(MainActivity.this,SecondAty.class)); 26 27 //使用swith查找要點擊的按鈕的id 28 /*switch (v.getId()){ 29 case R.id.btn: 30 startActivity(new Intent(MainActivity.this,SecondAty.class)); 31 break; 32 default: 33 break; 34 }*/ 35 } 36 }
第一個活動的xml代碼:
1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:paddingBottom="@dimen/activity_vertical_margin" 7 android:paddingLeft="@dimen/activity_horizontal_margin" 8 android:paddingRight="@dimen/activity_horizontal_margin" 9 android:paddingTop="@dimen/activity_vertical_margin" 10 tools:context="com.sanlian.buttontest.MainActivity" 11 > 12 13 <Button 14 android:id="@+id/btn" 15 android:layout_width="wrap_content" 16 android:layout_height="wrap_content" 17 android:text="點我"/> 18 </RelativeLayout>
其他的和第一個方法一樣
4.其他類實現onClickListener接口
讓另外一個類來實現onClickListener接口。這樣如果控件在需要設置點擊監聽的時候,直接傳入該類的對象即可。
第一個活動的java代碼:
1 package com.sanlian.buttontest; 2 3 import android.content.Intent; 4 import android.support.v7.app.AppCompatActivity; 5 import android.os.Bundle; 6 import android.util.Log; 7 import android.view.View; 8 import android.widget.Button; 9 10 public class MainActivity extends AppCompatActivity{ 11 12 @Override 13 protected void onCreate(Bundle savedInstanceState) { 14 super.onCreate(savedInstanceState); 15 setContentView(R.layout.activity_main); 16 //找到控件的id,也叫控件的初始化 17 Button btn = (Button) findViewById(R.id.btn); 18 Button btn2 = (Button) findViewById(R.id.btn2); 19 //給Button按鈕設置監聽 20 myListener mylistener = new myListener(); 21 btn.setOnClickListener(mylistener); 22 btn2.setOnClickListener(mylistener); 23 } 24 class myListener implements View.OnClickListener { 25 @Override 26 //參數v:就是觸發點擊的View控件。在這里就是被點擊了Button按鈕 27 public void onClick(View v) { 28 switch(v.getId()){ 29 case R.id.btn: 30 Log.i("TAG","你點擊了button1按鈕"); 31 break; 32 case R.id.btn2: 33 Log.i("TAG","你點擊了button2按鈕"); 34 } 35 36 } 37 } 38 39 }
第一個活動的xml代碼:
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:paddingBottom="@dimen/activity_vertical_margin" 7 android:paddingLeft="@dimen/activity_horizontal_margin" 8 android:paddingRight="@dimen/activity_horizontal_margin" 9 android:paddingTop="@dimen/activity_vertical_margin" 10 tools:context="com.sanlian.buttontest.MainActivity" 11 > 12 13 <Button 14 android:id="@+id/btn" 15 android:layout_width="wrap_content" 16 android:layout_height="wrap_content" 17 android:text="點我"/> 18 19 <Button 20 android:id="@+id/btn2" 21 android:layout_width="wrap_content" 22 android:layout_height="wrap_content" 23 android:text="點我"/> 24 25 26 </LinearLayout>
實現的結果截圖: