私の持っている古い(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()
}
}