Android将Activity迁移到Fragment,this变了,原来的context、activity怎么办
Android将Activity迁移到Fragment,this变了,原来的context、activity怎么办
刚开始学习android的时候,一般都是用的Activity,用Activity的话,基本什么都不缺,后面看到了Fragment,它是主要用来搞UI的,它比Activity更轻量,所以准备把之前写在Activity里面的逻辑通通迁移到fragment里面。
在迁移过程中发现部分变量没法获取了。
context
这个context就是Activity里面的this,很多方法都需要用到它,比如intent
intent.setClass(this, DeeplinkActivity::class.java);
或者一些第三方库
HmsMessaging.getInstance(this).turnOnPush().addOnCompleteListener { task ->
if (task.isSuccessful) {
showLog("turnOnPush Complete")
status = false;
} else {
showLog("turnOnPush failed: cause=" + task.exception.message)
}
}
在fragment里面的没法直接获取context,我们需要在onAttach
的生命周期里面把context存起来
class DashboardFragment : Fragment(), View.OnClickListener {
private var mContext: Context?= null
//...
override fun onAttach(context: Context) {
super.onAttach(context)
mContext = context;
}
//...
}
现在我们就可以这样了
intent.setClass(mContext, DeeplinkActivity::class.java);
和
HmsMessaging.getInstance(mContext).turnOnPush().addOnCompleteListener { task ->
if (task.isSuccessful) {
showLog("turnOnPush Complete")
status = false;
} else {
showLog("turnOnPush failed: cause=" + task.exception.message)
}
}
activity
比如原来的
fun showLog(log: String?) {
runOnUiThread {
val textView = findViewById<View?>(R.id.msgText)
if (textView is TextView) {
textView.text = log
}
}
}
中的runOnUiThread
即是this.runOnUiThread
在fragment里面需要这才行,用this.activity
fun showLog(log: String?) {
this.activity?.runOnUiThread {
val textView = root!!.findViewById<TextView?>(com.daozhao.hello.R.id.text_dashboard)
textView.text = log
}
}
目前就发现上述两处需要做额外处理的地方,后面要加强android里面this的了解,知道下它有哪些场景的方法,应该跟Javascript类似的。
- 分类:
- Android
相关文章
真的可以直接在Windows中运行原生Android4.0系统,
看到的第一印象想到了bluestacks吧,呵呵,那个知道的人已经不少了哦,这次说的可是近日国内的创业公司绍奇科技(SocketeQ)推出了一款名为WindowsAndroid的程序,可以直接在Win 阅读更多…
pixel 3A (XL ) android P root教程Magisk
目前android Q的root貌似还没有搞定,还是老老实实先用android P吧 root的准备工作 解锁bootloader,步骤自行搜索 已经打过补丁的boot.img文件, 阅读更多…
google keep来了
Google keep之前在网站上短暂的露了个脸,不到24个小时,它就真的来了。从外表上看,它的定位是一个简单的能让你快速获取并组织信息的记事本,你可以添加文本,音乐和清单。 google 阅读更多…
this指针变更,重新bind
这是一个面试题, [code lang="javascript"] 1 . var Obj=function(msg){ 2 . this.msg=msg 阅读更多…
给android模拟器安装apk
1、运行Android模拟器,启动你的Android手机系统,准备好你需要安装apk软件 例如,我把UC浏览器的APK放到D盘,文件名为:ucweb-7.2.2.54-999-139 阅读更多…
转载“牛叉的goophone 4GS”
“iphone”还可以运行android啊 Original resource: Click here 阅读更多…