参考文献:
关于this、getContext()、getActivity()、getApplication()、getApplicationContext()的区别:
https://blog.csdn.net/Mr_Leixiansheng/article/details/74929587

Fragment简介:
https://www.runoob.com/w3cnote/android-tutorial-fragment-base.html

Intent页面跳转:
https://www.cnblogs.com/anni-qianqian/p/5291605.html

背景:
需求是要把一个demo嵌入到另一个android项目中,并实现一键跳转。
思路首先就是使用Intent组件,但是出现了闪退等bug,经过整理后记录下来。

问题一:构造器不适用
按照显式intent的用法Intent intent = new Intent((Context packageContext, Class<?> cls)编写代码会报下图错误
图片说明
原因是当前的页面不是Activity而是Fragment,因为Fragment是直接从Object继承的,而Activity是Context的子类,Fragment不是Activity的扩展。所以Fragment无法通过.this来获取上下文,对于Fragment获取所依附的活动有专门的方法getActivity()
将代码改成这样就可以了

Intent intent = new Intent(getActivity().getApplicationContext(),MyTestDemo.class); 

PS:MyTestDemo.class不要误写成MyTestDemo.this

问题二:点击后闪退
闪退那么肯定就是代码有问题
直接把原先的demo复制进项目下的某个目录里一定要仔细检查引用的package、注册的路径、资源路径以及引用的布局名称,一处对应不上就会闪退
尤其注意setContentView(R.layout.xxx)里的布局文件名如果不改动,IDE不会检查出来标红,我就是犯了这个错误导致闪退,属实有点蠢。。。

如果用隐式Intent来实现,注意在AndroidManifest.xml里配置intent-filter时,CATEGORY_DEFAULT类别属性是调用活动时Android默认添加的,不可更改。所以category的配置必须写成

<category android:name="android.intent.category.LAUNCHER"/>

action里的配置名称可以修改,但是category这一条如果不一致匹配就会失效,也会造成点击闪退的bug