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
相关文章
Software being installed: Android Development Tools 16.0.1.v201112150204-238534 (com.android.ide.eclipse.adt.feature.group 16.0.1.v201112150204-238534)
怎么解决呢 官方的解决方案 During installation, there's an error about requiring org.eclipse.wst.sse.ui. How d 阅读更多…
android手机QQ2012很给力
前几天我更新了android手机QQ2012,感觉很给力哦。 特别是那个多终端同时在线,感觉很牛x。我还是今天猜发现的哦。 今天我在笔记本上用eclipse做小项目,电脑上同时登着QQ呢,我的手机 阅读更多…
android sdk离线安装
先分别下载所需包,再安装。 一,首先下载SDK的安装包,android-sdk_r06-windows.zip(安装工具)解压到目录,如我的目录D:\programs\android-sdk-win 阅读更多…
在电脑上安装Android模拟器Emulator
如果你还没有Android手机,那么可以先在电脑上安装一个Android模拟器,因为它可以在电脑上模拟出Android手机系统,让你也能体验一下它强大的魅力。 一、 在电脑上安装Andr 阅读更多…
如果android能运行windows程序,你会不会更喜欢android
如果可以在Android手机和平板电脑上能使用原本习惯了的Windows软件,是不是使用起来更得心应手,是不是更充分地发挥移动计算的能力呢? Wine 是一款 Linux 和 Mac 下的软件,它能 阅读更多…