一个用户菜单的需求,本来是想单独做成一个活动的,不过由于需要在按菜单键时显示在视频活动的上层,最终决定是做成一个PopupWindow,依托于视频活动的上下文对象。
kotlin和java的写法有些差别,另外根据情况需要入参mContext,
基本架构用到了databinding和viewmodel以及协程,根据需求需要网络请求,请求放在协程io里。
PopupWindow里没有oncreate方法,但是kotlin有init方法,可以做初始化的一些工作。
class UserPop(var mContext: AppCompatActivity?, width: Int = ViewGroup.LayoutParams.MATCH_PARENT, height: Int = ViewGroup.LayoutParams.MATCH_PARENT) : PopupWindow(width, height) {
private var mRoot: View?=null
private var binding: PopUserMenuBinding? = PopUserMenuBinding
.inflate(mContext!!.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater, null, false)
private var viewModel: PopViewModel?
private var privacyVM: PrivacyViewModel?
private var mLifecycleOwner: LifecycleOwner? = mContext!!
private var userGlobal: ViewTreeObserver.OnGlobalLayoutListener?=null
private var mLaunchingJob: Job? = null
init {
binding!!.lifecycleOwner = mLifecycleOwner
contentView = binding!!.root
viewModel = ViewModelProvider(mContext!!,
BaseViewModelFactory(MyApplication.mApplication,
MyApplication.mApplication.getmRepository()))[PopViewModel::class.java]
privacyVM=ViewModelProvider(mContext!!,
ViewModelProvider.AndroidViewModelFactory(MyApplication.mApplication))[PrivacyViewModel::class.java]
initView()
observeData()
getLoginInfo()
getVersion()
getVipDisCount(System