RadioButton與CheckBox

来源:http://www.cnblogs.com/his365/archive/2016/11/13/6059425.html
-Advertisement-
Play Games

筆者長期從事於資料庫的開發,算了,不提當年了,因為一直用的是小語種(PowerBuilder),還是來說說這兩個最常見的控制項吧! RadioButton(單選)和CheckBox(多選) 先來看看繼承關係吧 兩個還是親兄弟,是View的第四代傳人,是View的玄孫,好小呀! RadioButton必 ...


筆者長期從事於資料庫的開發,算了,不提當年了,因為一直用的是小語種(PowerBuilder),還是來說說這兩個最常見的控制項吧!

RadioButton(單選)和CheckBox(多選)
  1. 先來看看繼承關係吧
    1.  
    2. 兩個還是親兄弟,是View的第四代傳人,是View的玄孫,好小呀!
  2. RadioButton必須按組來分,而CheckBox不用,可以自由的玩耍;
    1. 這裡就需要引入了圈養人RadioGroup
    2. 這裡不難看出,圈養人是LinearLayout的兒子,那麼就可以制定方向了
    3. 上邊寫RadioButton必須按組來分,這裡語義上有點歧義吧,其實他可以不需要圈養人,也可以單獨存在,但是單獨存在就是去了意義,因為如果沒有RadioGroup,每個RadioButton都可以點中,互相之間沒有依賴了;
  3. 上代碼,熟悉下
    1. 佈局
      1. <?xml version="1.0" encoding="utf-8"?>
      2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      3. android:layout_width="match_parent"
      4. android:layout_height="match_parent"
      5. android:orientation="vertical"
      6. android:padding="10dp">
      7. <TextView
      8. android:layout_width="match_parent"
      9. android:layout_height="wrap_content"
      10. android:text="請選擇你的性別"/>
      11. <RadioGroup
      12. android:id="@+id/rg_sex"
      13. android:layout_width="match_parent"
      14. android:layout_height="wrap_content"
      15. android:orientation="horizontal">
      16. <RadioButton
      17. android:id="@+id/rb_man"
      18. android:layout_width="wrap_content"
      19. android:layout_height="wrap_content"
      20. android:text="男"/>
      21. <RadioButton
      22. android:id="@+id/rb_woman"
      23. android:layout_width="wrap_content"
      24. android:layout_height="wrap_content"
      25. android:text="女"/>
      26. </RadioGroup>
      27. <TextView
      28. android:layout_width="match_parent"
      29. android:layout_height="wrap_content"
      30. android:text="請選擇你的愛好"/>
      31. <CheckBox
      32. android:id="@+id/cb_swimming"
      33. android:layout_width="wrap_content"
      34. android:layout_height="wrap_content"
      35. android:text="游泳"/>
      36. <CheckBox
      37. android:id="@+id/cb_running"
      38. android:layout_width="wrap_content"
      39. android:layout_height="wrap_content"
      40. android:text="跑步"/>
      41. <CheckBox
      42. android:id="@+id/cb_study"
      43. android:layout_width="wrap_content"
      44. android:layout_height="wrap_content"
      45. android:text="學習"/>
      46. </LinearLayout>
       
    2. 代碼
      1. publicclassCheckboxAndRadioBoxActivityextendsAppCompatActivityimplementsCompoundButton.OnCheckedChangeListener,
      2. RadioGroup.OnCheckedChangeListener{
      3. privateRadioGroup rg_sex;
      4. privateCheckBox cb_swimming;
      5. privateCheckBox cb_running;
      6. privateCheckBox cb_study;
      7. privateList<String> hobby =newArrayList<>();
      8. @Override
      9. protectedvoid onCreate(@NullableBundle savedInstanceState){
      10. super.onCreate(savedInstanceState);
      11. setContentView(R.layout.activity_checkbox_and_radiobox);
      12. rg_sex =(RadioGroup) findViewById(R.id.rg_sex);
      13. cb_swimming =(CheckBox) findViewById(R.id.cb_swimming);
      14. cb_running =(CheckBox) findViewById(R.id.cb_running);
      15. cb_study =(CheckBox) findViewById(R.id.cb_study);
      16. rg_sex.setOnCheckedChangeListener(this);
      17. cb_swimming.setOnCheckedChangeListener(this);
      18. cb_running.setOnCheckedChangeListener(this);
      19. cb_study.setOnCheckedChangeListener(this);
      20. }
      21. @Override
      22. publicvoid onCheckedChanged(CompoundButton buttonView,boolean isChecked){
      23. switch(buttonView.getId()){
      24. case R.id.cb_swimming:
      25. if(isChecked){
      26. hobby.add("游泳");
      27. }else{
      28. hobby.remove("游泳");
      29. }
      30. break;
      31. case R.id.cb_running:
      32. if(isChecked){
      33. hobby.add("跑步");
      34. }else{
      35. hobby.remove("跑步");
      36. }
      37. break;
      38. case R.id.cb_study:
      39. if(isChecked){
      40. hobby.add("學習");
      41. }else{
      42. hobby.remove("學習");
      43. }
      44. break;
      45. }
      46. String str="";
      47. for(int i =0; i < hobby.size(); i++){
      48. if(i==0){
      49. str = hobby.get(0);
      50. }else{
      51. str +=","+hobby.get(i);
      52. }
      53. }
      54. Toast.makeText(getApplicationContext(),"愛好:"+ str,Toast.LENGTH_SHORT).show();
      55. }
      56. @Override
      57. publicvoid onCheckedChanged(RadioGroup group,int checkedId){
      58. switch(checkedId){
      59. case R.id.rb_man:
      60. Toast.makeText(getApplicationContext(),"性別:男",Toast.LENGTH_SHORT).show();
      61. break;
      62. case R.id.rb_woman:
      63. Toast.makeText(getApplicationContext(),"性別:女",Toast.LENGTH_SHORT).show();
      64. break;
      65. }
      66. }
      67. }
       
  4. 這裡說說當RadioGroup與CompoundButton的OnCheckedChangeListener出現衝突怎麼辦?他們的方法都是onCheckedChanged,我這裡用Activity同時實現以上兩個介面,根據參數的不同,RadioGroup與CompoundButton他們知道自己去調用自己的介面方法,雖然名稱一樣,但是參數不同呀,這裡就要理解兩個概念了
    1. 方法重載:方法名稱相同,與返回值無關,參數個數或者類型至少有一樣不同
    2. 方法覆蓋: 子類重寫了父類的方法,函數名稱,參數,返回值必須和父類一模一樣,這裡可以加註解來判斷@Override,系統可以幫你檢測方法 的正確性;
    3. 當初老師的說法是既然這兩個介面一樣,為什麼不寫成一個介面,這豈不是違背了面向對象的原理?我認為主要從兩方面來考慮:
      1. RadioGroup.OnCheckedChangeListener是對組的一個點擊改變的監聽,CompoundButton.OnCheckedChangeListener是對view組件的點擊事件改變的監聽,group可以有孩子,而後者不可以有孩子,我想這應該是本質的區別吧;
      2. 我想Google當初設計的還是怕把這兩個方法寫在一個介面中,擔心回調的時候出現混淆吧;



來自為知筆記(Wiz)




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

-Advertisement-
Play Games
更多相關文章
  • AsyncTask,是android提供的輕量級的非同步類,可以直接繼承AsyncTask,在類中實現非同步操作,並提供介面反饋當前非同步執行的程度(可以通過介面實現UI進度更新),最後反饋執行的結果給UI主線程. 本文不分析AsyncTask的使用,它的使用教程網上一搜一大堆,本文主要分析它的內部邏輯和 ...
  • iOS開發中,發現UITextView沒有像UITextField中textFieldShouldReturn:這樣的方法,那麼要實現UITextView關閉鍵盤,就必須使用其他的方法,下麵是可以使用的幾種方法。 1.如果你程式是有導航條的,可以在導航條上面加多一個Done的按鈕,用來退出鍵盤,當然 ...
  • 綜上所述:這就是一個標準的的非同步操作,就像我們寄信一樣,我們只負責寫好信(Message)通過郵遞員(Handler)放入到郵箱(MessageQueue)中,由工作人員(Looper)去迴圈查詢,再由郵遞員處理(Handler)處理這些消息; //延遲兩秒跳轉 newHandler().postD ...
  • 1.自定義VideoView 1_自定義VideoView-增加設置視頻大小方法 2_得到屏幕高和寬方法 在播放器中 3_視頻預設和全屏 一播放起來,在準備好了中設置視頻播放預設 4_屏幕保持不鎖屏 5_點擊按鈕的時候實現切換播放模式 ...
  • retrofit 英文名字是改裝的意思,也就是說他是對網路請求的一種改裝,他不負責進行網路請求,他是對請求方式的一種封裝。真正進行網路請求的是okhttp。 以下所有內容在Android Studio已經導入retrofit為基礎。導入方式如下: 利用Retrofit進行簡單的GET請求 retro ...
  • 現在的cocoapods與之前比較。有很多不一樣的地方。自己試了一試,終於搞定。現在大概紀錄一下。 1.首先查看ruby是否是最新版的。 ruby是通過rvm安裝的所以需要先安裝rvm後查看ruby是否是最新的(通過查看ruby版本列表來判斷),在終端需要中輸入以下命令: (1)安裝RVM.RVM: ...
  • 1.設置電池狀態 1_監聽電量變化廣播 2_電量刷新方法 2.得到系統時間並且更新顯示 1_得到系統時間 2_在hanlder設置更新 3.傳遞播放列表 序列化 4.監聽播放完成和播放上一個視頻 1_設置監聽播放完成 2_點擊下一個按鈕 5.播放器控制面板控制面 1_手勢識別器 2_隱藏和顯示控制面 ...
  • https://www.buzzingandroid.com/tools/android-layout-finder/ ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...