Kotlinで通知ページリストをファイルに保存・読込

app>src>main>java>com.example.tabapplication>ui>home>NotificationsFragment.kt
先頭にファイルfruits.datがあればgetFile2Data関数呼出、なければputData2File関数呼出を追加。
Viewが終わる時にputData2File関数呼出を追加。
getFile2Data関数で、ファイルを入力オープンし、読込各行をカンマで分割し、dataから元ListItem削除、dataに新ListItemを追加。
putData2File関数で、ファイルを出力オープンし、dataの各ListItemの値をカンマ結合。改行結合してできた文字列をファイルに書込。
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        notificationsViewModel =
            ViewModelProvider(this).get(NotificationsViewModel::class.java)

        _binding = FragmentNotificationsBinding.inflate(inflater, container, false)
        val root: View = binding.root

        val list = root.findViewById<ListView>(R.id.list)
        val adapter = MyListAdapter(requireContext(), data, R.layout.list_item)
        list.adapter = adapter

        list.setOnItemClickListener{ _, _, position, id ->
            val item = adapter.getItem(position)
            val newItem = ListItem(id,item.kind,!item.checked)
            data.removeAt(position)
            data.add(position,newItem)
            adapter.notifyDataSetChanged()
        }

        return root
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val file = requireContext().getFileStreamPath("fruits.dat")
        if(file.exists()){
            getFile2Data()
        }else{
            putData2File()
        }

        notificationsViewModel =
            ViewModelProvider(this).get(NotificationsViewModel::class.java)

        _binding = FragmentNotificationsBinding.inflate(inflater, container, false)
        val root: View = binding.root

        val list = root.findViewById(R.id.list)
        val adapter = MyListAdapter(requireContext(), data, R.layout.list_item)
        list.adapter = adapter

        list.setOnItemClickListener{ _, _, position, id ->
            val item = adapter.getItem(position)
            val newItem = ListItem(id,item.kind,!item.checked)
            data.removeAt(position)
            data.add(position,newItem)
            adapter.notifyDataSetChanged()
        }

        return root
    }

    override fun onDestroyView() {
        putData2File()
        super.onDestroyView()
        _binding = null
    }

    private fun getFile2Data(){
        var pos = -1
        var id:Long = 0
        requireContext().openFileInput("fruits.dat")
            .bufferedReader().forEachLine {
                pos += 1
                id += 1
                val arr = it.split(",")
                var chk = false
                if(arr[2] == "1") chk = true
                data.removeAt(pos)
                val newItem = ListItem(id,arr[1],chk)
                data.add(pos,newItem)
             }
    }

    private fun putData2File(){
        val str = StringBuilder()
        data.forEach{
            var chk = "0"
            if (it.checked) chk = "1"
            str.append("${it.id},${it.kind},${chk}")
            str.append(System.getProperty("line.separator"))
        }
        requireContext().openFileOutput("fruits.dat", AppCompatActivity.MODE_PRIVATE)
            .bufferedWriter().use {
                it.write(str.toString())
            }
    }
contextのところにrequireContext()。Listの項目修正に、removeとadd

実行
開始時にWebを表示。
戻って、Notificationsを選択。
通知設定状況を変化させる。
Home選択でWebを表示。アプリを終了
Android Studioの[表示]-[ツール・ウィンドウ]-[デバイス・ファイル・エクスプローラー]
デバイスを選択して[data]-[data]-[com.example.tabapplication]-[files]にあるfruits.datをダブルクリック
変化させた通知設定状況が表示される。

アプリを起動してWebを表示。
戻って、Notificationsを選択。
変化させた通知設定状況が表示される。