道招

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类似的。

更新时间:
上一篇:记录闲暇之余做的个人项目下一篇:window10的android studio一直卡在灰色的 loading devices,无法选择设备怎么解决

相关文章

android手机刷机精灵

前两天发现了一个软件叫刷机精灵,是针对android手机刷机用的,对于很多人不太会刷机,或者懒得看教程刷机,甚至懒得下载rom,但是对目前手机的rom还不满意,刷机精灵就是一个很好的帮手了。 阅读更多…

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 阅读更多…

google keep来了

Google keep之前在网站上短暂的露了个脸,不到24个小时,它就真的来了。从外表上看,它的定位是一个简单的能让你快速获取并组织信息的记事本,你可以添加文本,音乐和清单。 google 阅读更多…

pixel 3A (XL ) android P root教程Magisk

目前android Q的root貌似还没有搞定,还是老老实实先用android P吧 root的准备工作 解锁bootloader,步骤自行搜索 已经打过补丁的boot.img文件, 阅读更多…

关注道招网公众帐号
联系博主