タブレット用プログラムの書き止め

android OS & iPadOS の記録。

【kotlin】 設計の再確認

2024-03-03 23:19:02 | Android studio 日記

私の持っている古い(API17)androidタブレットをターゲットに開発する。(表示サイズに難あり)
メモリが少ないのでピンチによる拡大縮小は今後の課題で後回し。
簡単に拡張できるように構成を考える。

横長固定。いづれはデバイス回転でモード切り替えができるような構成を考える。
他、メモリリーク対策など。

Kotlinが意外と曲者で熟知している知人が居れば移行はできそう。
独学となると、必要としている情報を見つけ出すのに時間を取られる。
粘り強い人は良いけど、そうでなければJavaが無くなるまで続けるのが…。

 

余白埋めで、基本的な部分の viewModel を Fragment で使うまとめ。

Activityで宣言したViewModelをFragmentで使う。
Kotlinの説明がWeb上に少ないが、使途別は多い。どれを使えばいいか判断しにくい。
それでも自動変換となんやらかんやらで動くようになったので記録する。

ちょっと、反則?みたいだけど、まぁいいか。
本来はプロパティでリアルタイム更新?に使う感じなのかな。

【MainActivity】

class MainActivity : AppCompatActivity() {
    private val viewModel : MainViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        viewModel.loadData(this)
    }

    override fun onDestroy() {
        viewModel.storeData(this)
        super.onDestroy()
    }
}


【MainFragment】

class MainFragment : Fragment() {

    private val viewModel: MainViewModel by activityViewModels()
    private var fileListManager: MyFileListManager? = null
    private var fileList: MyFileList? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        fileListManager = viewModel!!.fileListManager
        fileList = viewModel!!.fileList
    }

    override fun onDestroyView() {
        super.onDestroyView()
        fileListManager = null // フラグメントが終了したら参照を切る
        fileList = null
    }
    override fun onDestroy() {
        super.onDestroy()
    }
}

【ViewModel】

class MainViewModel: ViewModel() {

    private val _fileListManager: MyFileListManager
    private val _fileList: MyFileList

    init {
        _fileList = MyFileList()
        _fileListManager = MyFileListManager()
        _fileListManager.setFileList(_fileList) // インスタンス作成時に合わせってセットしたかった。
    }

    val fileListManager: MyFileListManager
        get() = _fileListManager
    val fileList: MyFileList
        get() = _fileList


    fun loadData(context: Context) {
        try {
            val pref = PreferenceManager.getDefaultSharedPreferences(context)
            //省略 Preferencesから読み出し
        } catch (e: Exception) {
            //省略
        }
    }

    fun storeData(context: Context) {
        try {
            val editor = PreferenceManager.getDefaultSharedPreferences(context).edit()
            //省略 ViewModelの一部をPreferencesに保存
        } catch (e: Exception) {
            //省略
        }
    }

    fun finish() {
        _fileList.finish()
        _fileListManager.finish()
    }

    override fun onCleared() {
        finish()
        super.onCleared()
    }
}

 


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする