【lushengduan】03、點擊事件的四種實現方式

来源:http://www.cnblogs.com/lushengduan/archive/2016/03/14/5276935.html
-Advertisement-
Play Games

    好吧,首先我們來解釋一下什麼“點擊事件”,所謂“點擊事件”就是當我們點擊(註意是單擊)手機屏幕時,系統做出相應的響應;舉個例子哈,你去朋友家裡,要告訴你的朋友你到了,你是不是要敲一敲門,然後你朋友聽到了就來給你開門了,這個就和我們點擊屏幕上的Button很類似,點擊的操作相當於敲門,至於“朋


    好吧,首先我們來解釋一下什麼“點擊事件”,所謂“點擊事件”就是當我們點擊(註意是單擊)手機屏幕時,系統做出相應的響應;舉個例子哈,你去朋友家裡,要告訴你的朋友你到了,你是不是要敲一敲門,然後你朋友聽到了就來給你開門了,這個就和我們點擊屏幕上的Button很類似,點擊的操作相當於敲門,至於“朋友聽到”和“開門”這兩個行為動作,就是我們今天要探討的內容了。

    手機沒有耳朵,不可能“聽到”我們點擊了屏幕,因此,需要給Button綁定一個監聽器,每當Button被點擊了,就去執行某些特定的操作,常用的點擊事件的實現方式有四種。

 

一、佈局中綁定onClick屬性

    上一篇文章大家也接觸到了,在Button這個控制項裡面,設置“android:onClick”屬性

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="showToast"
        android:text="CLICK ME!"/>

    “onClick”的值將對應載入這個佈局的Activity中方法,也就是說如果“android:onClick=“xxx””的話,那麼,在HelloWorldActivity里的方法就應該為

    public void xxx(View view){
        //Do what you want to do here.
    }

    當我們點擊Button的時候,就會去執行xxx方法里的代碼

 

二、實現OnClickListener介面

    OnClickListener是一個介面,通過implements來onClick這個介面,在onClick這方法裡面就可以實現自己的操作了

package com.example.lushengduan.helloworld;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;

/**
 * Created by Lushengduan on 2016/3/4.
 */
public class HelloWorldActivity extends Activity implements OnClickListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
    }

    @Override
    public void onClick(View v) {
        //Do what you want to do here.
    }
}

    看到這裡大家會不會有個問題,這個監聽器沒有明確指定監聽哪一個組件,那它是怎麼工作的呢?是這樣的,我們能通過v.getId()來標識不同的組件,現在為Button增加一個名為“button1”的id

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="showToast"
        android:id="@+id/button1"
        android:text="CLICK ME!"/>

   那麼結合View類里的getid就可以定位到我們點擊的Button這個控制項,而不是其他地方了,代碼如下

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.button1:
                //To do someThing
                break;
            default:
                break;
        }
    }

   

三、內部類方式

    Button類里有個方法叫做“setOnClickListener”,這個方法的參數需要的是一個OnClickListener的對象,新建一個內部類實現OnClickListener的介面就行了,在這之前,我們需要通過findViewById的方式拿到Button對象

button = (Button) findViewById(R.id.button1);

   為Button設置監聽器

button.setOnClickListener(new MyClickListener());

    然後在onClick方法中執行你想要的操作,完整代碼如下

package com.example.lushengduan.helloworld;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

/**
 * Created by Lushengduan on 2016/3/4.
 */
public class HelloWorldActivity extends Activity {

    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
        button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new MyClickListener());
    }

    private class MyClickListener implements OnClickListener{

        @Override
        public void onClick(View v) {
            //Do what you what to do here.
        }
    }
}

 

四、匿名內部類方式

    能寫成內部類的,可以寫成匿名內部類的方式,理解了上面的代碼後,那麼就很簡單,基本是java的基礎知識了,直接看代碼

package com.example.lushengduan.helloworld;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

/**
 * Created by Lushengduan on 2016/3/4.
 */
public class HelloWorldActivity extends Activity {

    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
        button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //Do what you want to do here.
            }
        });
    }
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 有時候我們會碰到這樣子的一種情形: 同時獲取兩個網路請求的數據,但是網路請求是非同步的,我們需要獲取到兩個網路請求的數據之後才能夠進行下一步的操作,這個時候,就是線程組與信號量的用武之地了. 列印結果: 2016-03-15 04:01:53.279 NetWorking[83611:1508240]
  • 由於安卓應用很廣泛,在工業中也常有一些應用,比如可以用安卓來去工業中的一些數據進行實現的監測,顯示,同時可以做一些自動化控制,當然在這裡,我不是做這些自動化控制方面的研究,只是做一個控制項,液位指示,其實就是繼承自progressbar,然後重新寫一測量與繪製,算是對自定義控制項進行一下複習。 我們要做
  • 單機搭建Android開發環境三,優化VMWare配置及Ubuntu系統,縮短Ubuntu開機時間,並提高其運行性能。
  •       最近項目中需要客戶端和Socket互相傳遞數據時候需要相互傳遞圖片所以做下總結以免以後忘記,也希望給大家帶來幫助。       先上客戶端的代碼:       根據圖片名稱上傳照相機中單個照片(此方法為自己封裝)       參數所代表的是照片的路徑。 註:在android Activi
  • 1. 三種創建線程的方法 //第一種      NSThread * thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(doAction) object:nil];     //線程名     thread1.nam
  • UISearchBar繼承自UIView、UIResponder、NSObject  autocapitalizationType————自動對輸入文本對象進行大小寫設置(包含4種類型,但是有時候鍵盤會屏蔽此屬性)  autocorrectionType————自動對輸入文本對象進行糾錯。  bac
  • 首先你要創建2個繼承自UIViewController的類 。 命名為FirstViewController和secondViewController。 首先在AppDelegate.h文件中引入頭文件      然後在AppDelegate.m中寫下 - (BOOL)application:(UI
  • 首先創建一個引導圖的控制器類 正文頁firstViewController.h和firstViewController.m AppDelegate.mAppDelegate.h文件 運行效果 第一次運行 第二次運行  
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...