iT邦幫忙

2023 iThome 鐵人賽

DAY 30
0

目錄

  1. 關於專案
  2. 心得

正文

關於專案

今天我大概花了4個小時在做,但一整個大失敗,我期望將 SettingFragment 的資料傳到 HomeFragment,然後根據設定修改測驗的內容,可是我在寫的過程中瘋狂碰壁,導致我心態有點糟糕,等到鐵人賽結束後應該還會再寫幾篇來補一下遺憾,我盡力而為。

整理一下遇到的三大問題:

  1. Xml 的資料讀取方式,之前在寫資料的時候就有碰到一些 xml 讀取資料的問題,所以一開始我直接建一個 map 來存資料,但資料太多,所以我就重新爬文找方法,後來在 android 的官網找到 string-array 的寫法,所以我在 strings.xml 把所有的日文資料都存起來了。

    • strings.xml

      <string-array name="JP_Hiragana_half_voiced">
          <item>ぱ</item> <!--pa-->
          <item>ぴ</item>
          <item>ぷ</item>
          <item>ぺ</item>
          <item>ぽ</item>
      </string-array>
      
    • HomeFragment.kt

      val resources: Resources = Resources.getSystem()
      val array = resources.getStringArray(R.array.JP_Hiragana_half_voiced)
      
  2. 網路上 Fragment 的資料說多不多,但大部分都是 java 的程式,而且做法太多了很亂,我花了兩個小時在研究不同的方法,最後成功用 bundle 把 setting 的資料傳到 home。

    • build.gradle.kts (Module :app),加入下面這行

      dependencies {
      		implementation("androidx.fragment:fragment-ktx:1.6.1")
      }
      
    • 想要傳資料的 Fragment

      override fun onCreateView(
          inflater: LayoutInflater, container: ViewGroup?,
          savedInstanceState: Bundle?
      ): View? {
          binding = FragmentSettingBinding.inflate(inflater,container,false)
          val view = viewBinding.root
      
          viewBinding.switch1.setOnClickListener{
              val bundle: Bundle = Bundle()
              bundle.putString("switch",viewBinding.switch1.isChecked.toString())
              setFragmentResult("switchData",bundle)
          }
      
          return view
      }
      
    • 想要接收資料的 Fragment

      override fun onCreateView(
      		    inflater: LayoutInflater,
      				container: ViewGroup?,
      		    savedInstanceState: Bundle?
      		): View? {
      		    binding = FragmentHomeBinding.inflate(inflater,container,false)
      		    val view = viewBinding.root
      
      		    setFragmentResultListener("switchData"){
      		        _, bundle ->
      		        viewBinding.textView2.text = bundle.getString("switch")
          }
      		return view
      }
      
  3. 最後一個問題,也是我最頭痛的,首先是 map 是唯獨的狀態,但我如果改成 mutableMap 的寫法,程式會直接Crash,經過一番糾結我改成用兩個 array 存資料,但因為不熟悉 Kotlin 的陣列,所以再次 Crash,怎麼修都還是 Crash,我原地放棄。

心得

這 30 天比我想像的還要充實,因為要教別人的緣故,有很多平常我應該會直接忽略的事情都有認真爬文,多虧如此知道了很多有趣的知識,雖然還是有很多東西超級亂的XD,但我相信透過寫專題的教學方式,應該有帶給大家不少的收穫。

之後我應該會把這 30 天做的專案都丟到 github 上,如有需要再麻煩等我幾天。

總結

謝謝大家陪我度過糊裡糊塗的30天。

參考資料

Android Developers - 字串資源
https://developer.android.com/guide/topics/resources/string-resource?hl=zh-tw

【Android,Kotlin】前画面のFragmentに値を返す
https://www.google.com/search?client=firefox-b-d&q=XML+陣列讀取#ip=1

Send Data from one Fragment to Another Fragment || Fragment to Fragment Communication || 2021
https://developer.android.com/guide/topics/resources/string-resource?hl=zh-tw

Android Fragment 共用 ViewModel
https://medium.com/evan-android-note/android-fragment-共用-viewmodel-19a6d9161421

【Kotlin】第4課-陣列(Array)
https://chikuwa-tech-study.blogspot.com/2021/05/kotlin-array.html

【Kotlin】第5課-集合(List、Set、Map)
https://chikuwa-tech-study.blogspot.com/2021/05/kotlin-list-set-map.html


上一篇
Day.29 夢想專案(日文學習 APP) - 9 調整按鈕背景色
下一篇
Day.31 夢想專案(日文學習 APP) - Final
系列文
剛學Kotlin的我想要玩安卓開發,自學 Android Studio 30 天31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言