はじめに
今回はMVP(アーキテクチャ)に沿って、LocalRepository設定(ローカルデータに保存、読み込み)を実装していきたいと思います。
本記事は「【kotlin】超簡単なMVPを実装してみた、①Presenter」の内容を引き継いで実装しています。
これまでの内容は
【kotlin】超簡単なMVPを実装してみた、①Presenterの実装
をご参照ください
実装内容
LocalRepository(ローカルデータに保存、読み込み)まで実装する。
①EditTextに文字を入力してボタンを押したら、文字を保存し、下部のTextViewに表示させる。
②アプリを閉じ、再起動したら保存した文字を読み取り、下部のTextViewに表示させる。
実装
[レイアウト]
※前回と同じです。
①editText
②button
③textView
[コード]
・LocalRepository設定
※LocalRepositoryの役割はPresenterに橋渡し、Presenterで使用するメソッドを定義する。
※SharedPreferencesを使用する。
①LocalRepositoryを作成。
②LocalRepositoryで使用するメソッドを追加する。
interface LocalRepository {
//②文字を保存するメソッド
fun saveText(text: String)
//②文字を読み込むメソッド
fun loadText():String
}
③PreferencesManagerを作成。
④戻り値にLocalRepositoryを導入する。
⑤SharedPreferenceインスタンス化。
⑥LocalRepositoryで設定したメソッドが出るので設定。
※SharedPreferencesの使い方は割愛させていただきます。
//④戻り値にLocalRepositoryを導入する。
class PreferenceManager(context: Context): LocalRepository {
//⑤SharedPreferenceインスタンス化。
val sharedPref = context.getSharedPreferences("my_settings", Context.MODE_PRIVATE)
//⑥文字を保存する処理
override fun saveText(text: String) {
sharedPref.edit().putString("a",text).apply()
}
//⑥文字を読み出す処理
override fun loadText():String {
return sharedPref.getString("a","初期値")!!
}
}
・Presenter設定
①Presenterの引数にLocalRepositoryを追加
②LocalRepositoryのメソッドを呼び出し使用する。
//①Presenterの引数にLocalRepositoryを追加
class MainPresenter(private val view: MainContract.View, private val localRepository: LocalRepository): MainContract.Presenter {
init {
view.presenter = this
}
override fun start() {
//②文字を呼び出す
val text =localRepository.loadText()
view.showTextView(text)
}
override fun onClickButton(text: String) {
//②文字を保存する
localRepository.saveText(text)
view.showTextView(text)
}
}
・View設定
View側
①Presenterに引数にpreferenceManagerを追加
class MainFragment: Fragment(),MainContract.View {
override lateinit var presenter: MainContract.Presenter
lateinit var editText :EditText
lateinit var button :Button
lateinit var textView :TextView
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_main, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
editText = view.findViewById<EditText>(R.id.editTextText)
button = view.findViewById<Button>(R.id.button)
textView = view.findViewById<TextView>(R.id.textView)
//①Presenter初期化
initPresenter()
presenter.start()
button.setOnClickListener{
presenter.onClickButton(editText.text.toString())
}
}
override fun showTextView(text: String) {
textView.text = text
}
fun initPresenter() {
if (::presenter.isInitialized) {
return
}
context?.let {
presenter = MainPresenter(this, PreferenceManager(it))
}
}
}
以上、LocalRepositoryの実装でした。
次回Retrofitを使用したRemoteRepository設定(APIのやり取り)の設定を記事にしたいと思います。
関連記事
【kotlin】超簡単なMVPを実装してみた、①Presenterの実装
【kotlin】超簡単なMVPを実装してみた、③RemoteRepository設定(APIのやり取り)