Button的四種監聽方式


        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>

實現的結果截圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM