博学谷项目课程页面bug:FragmentActivity cannot be applied to ‘(com.boxuegu.activity.MainActivity)‘

一、问题引入

今天在写博学谷项目课程界面时发现如下错误:

'CourseView(android.support.v4.app.FragmentActivity)' in 'com.boxuegu.View.CourseView' cannot be applied to '(com.boxuegu.activity.MainActivity)'

 二、问题分析

查看CourseView.java中定义的CouseView构造方法,发现其指定的参数类型为FragmentActivity类型,而在MainActivity中this的类型是MainActivity(Activity)。

 正常来讲,android FragmentActivity与MainActivity(Activity)是可以自动转化的,

但是有一个重要问题:

我们在写CourseView时使用的FragmentActivity和ViewPager是android.support.v4支持的,而不是MainActivity中的androidx.appcompat.app.AppCompatActivity支持的

CourseView.java

MainActivity.java

 

我们查看《Android项目实战:博学谷》原书代码中每一个Activity.class的import,都可以发现如下片段:

import android.support.v7.app.AppCompatActivity

 而我们使用AndroidStudio默认的Activity引入如下:

import androidx.appcompat.app.AppCompatActivity;

读到这里,你应该已经发现问题所在:

androidx中Activity与android.support.v7中Activity类型不匹配的问题。

三、问题解决

1.分析原理

解决问题前,我们首先要搞清楚到底为什么android要引入andoridx而逐渐废弃android.support库依赖。

以下取自AndroidX 概览  |  Android 开发者  |  Android Developers

androidx 命名空间包含 Android Jetpack 库。与支持库一样,androidx 命名空间中的库与 Android 平台分开提供,并向后兼容各个 Android 版本。

AndroidX 对原始 Android 支持库进行了重大改进,后者现在已不再维护。androidx 软件包完全取代了支持库,不仅提供与支持库同等的功能,而且还提供了新的库。

此外,AndroidX 还包括以下功能:

  • AndroidX 中的所有软件包都使用一致的命名空间,以字符串 androidx 开头。支持库软件包已映射到对应的 androidx.* 软件包。如需获取所有旧类到新类以及旧构建工件到新构建工件的完整映射,请参阅软件包重构页面。

  • 与支持库不同,androidx 软件包会单独维护和更新。从版本 1.0.0 开始,androidx 软件包使用严格的语义版本控制。您可以单独更新项目中的各个 AndroidX 库。

  • 版本 28.0.0 是支持库的最后一个版本。我们将不再发布 android.support 库版本。 所有新功能都将在 androidx 命名空间中开发。

写项目过程中我们需要大量引入andorid.support库依赖,这将导致例如库冲突等严重库管理问题,为此android把所有库依赖集成为androidx,以便开发者使用。

2.问题解决思路:

通过把所有如下import替换为androidx(不能手动替换)

import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;

替换为:

import com.boxuegu.activity.MainActivity;
import androidx.viewpager.widget.ViewPager;

 3.操作过程(一定要通过代码补全方式):

3.1修改CourseView.java中的构造函数参数类型为MainActivity

 3.2修改CourseView.java中

private FragmentActivity mContext;//广告内容

的类型,android.support.v4.app改为androidx.fragment.app

 3.3.修改AdBannerAdapter.java两个构造函数中FragmentManager类型,android.support.v4.app改为androidx.fragment.app

 3.4修改AdBannerAdapter类的继承类FragmentStatePagerAdapter的类型,android.support.v4.app改为androidx.fragment.app

 3.5修改getItem方法返回值类型,android.support.v4.app改为androidx.fragment.app

 3.6修改AdBannerFragment的继承类类型

3.7修改CourseView.java中ViewPager类型

 

 

 3.8修改adPaper类型

 3.9修改OnPageChangeListener的类型

 3.10修改main_adbanner.xml中对ViewPager的引用

 

至此修改完毕。

效果:MainActivity中已无错误提示

 

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值