本片文章主要说的是主要是用属性代理的方法实现对Preferences的分装:
多余的不多说,直接上代码:
1、第一步首先对外部提供全局上下文,方便引用
/** * Application 基类 */ private lateinit var INAPPLICATION: Application //外部全局调用 object AppContext : ContextWrapper(INAPPLICATION) open class BaseApplication : Application() { lateinit var appComponent: AppComponent override fun onCreate() { super.onCreate() INAPPLICATION = this } }2、关键的实现全在这里了
3、方便调用向外部提供形如变量的方式
/** * Created by Evlis on 2019/7/17. * 存取调取 */ object PreferencesUtils { var _phone: String by Preference(PreStatic.PHONE, PreStatic.DEFAULT) var _password: String by Preference(PreStatic.PASSW, PreStatic.DEFAULT) } /** * 静态量存储 */ class PreStatic private constructor(val value: String) { companion object { val DEFAULT: String = "" //账号 @JvmField val PHONE: String = "phone" //密码 @JvmField val PASSW: String = "password" } }4、具体调用看下面
/** * 具体使用 */ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) showContent() bt_save.setOnClickListener { //存数据 PreferencesUtils._phone = et_name.text.toString() PreferencesUtils._password = et_name.text.toString() showContent() } } /** * 显示内容 */ private fun showContent() { //取数据 show_content_name.text = "账号:"+ PreferencesUtils._phone show_content_pass.text = "密码:"+ PreferencesUtils._password et_name.hint = PreferencesUtils._phone et_pass.hint = PreferencesUtils._password } }5、项目地址:[https://github.com/ElvisBin/KtPreference]